Здравствуйте! Сегодня: Ср, 16 Янв 2019, Ваш IP: 54.226.64.30 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Web-программирование
+ Создать новую тему Страница: 1
Тема: Множественная загрузка файлов · +  +  дата добавления: 06.06.2015 / 13:36
Автор темы:
anka_x
anka_x
тем: 8 / ответов: 61 / благодарностей: 0 / репутация: 4
ответов: 61
создал(а) тем: 8


Добрый день.
Есть форма, которая позволяет загрузить один файл:
<Input ID="frmFileUpload" Type="File" runat="server">
.
Можно ли через одну форму выбрать и загрузить сразу несколько файлов?
Технологии: ASP .NET
 
Ответ # 1 # · +  +  дата добавления: 06.06.2015 / 14:52
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Добавить атрибут multiple:
<Input ID="frmFileUpload" Type="File" multiple="multiple" runat="server">
 
Ответ # 2 # · +  +  дата добавления: 06.06.2015 / 18:18
Автор ответа:
anka_x
anka_x
тем: 8 / ответов: 61 / благодарностей: 0 / репутация: 4
ответов: 61
создал(а) тем: 8


Все гениальное просто! :) Спасибо, Алексей!
А как потом сохраняются выбранные файлы? Можно сохраняемым фалам задать новые имена? Есть какой-нибудь пример?
 
Ответ # 3 # · +  +  дата добавления: 06.06.2015 / 18:53
Автор ответа:
anka_x
anka_x
тем: 8 / ответов: 61 / благодарностей: 0 / репутация: 4
ответов: 61
создал(а) тем: 8


При загрузке одного файла код такой:
Sub SubmitUploadFile(ByVal sender As Object, ByVal e As EventArgs)
	If Not (frmFileUpload.PostedFile Is Nothing) then
	Dim FileName As String = Request.QueryString("FileName") & ".jpg"
		frmFileUpload.PostedFile.SaveAs(Request.PhysicalApplicationPath & Request.QueryString("FileFolder") & "\" & FileName)
	End If
End Sub
При загрузке нескольких файлов надо как-то вычленить каждый из файлов и для каждого повторить сохранение. Как узнать количество и имена загружаемых файлов?
 
Ответ # 4 # · +  +  дата добавления: 06.06.2015 / 20:01
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Массив файлов должен быть в frmFileUpload.PostedFiles , можно просто циклом все файлы перебрать.

Или в коллекции Request.Files.

For Each file In frmFileUpload.PostedFiles
  'file.SaveAs...
Next

Request.QueryString("FileName")
frmFileUpload.PostedFile.FileName
frmFileUpload.PostedFile.SaveAs(
Лучше записывать контролируемыми потоками, чтобы избежать блокировку файла.

Примерно так:
Dim buffer(frmFileUpload.PostedFile.InputStream.Length - 1) As Byte
frmFileUpload.PostedFile.InputStream.Read(buffer, 0, buffer.Length)
Using fs As New FileStream(outputPath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
  Using writer As New BinaryWriter(fs, System.Text.Encoding.UTF8))
    writer.Write(buffer);
  End Using
End Using

Request.PhysicalApplicationPath & Request.QueryString("FileFolder") & "\" & FileName
Для склейки путей можно использовать метод System.IO.Path.Combine:
Dim filePath As String = System.IO.Path.Combine("C:\", "папка", "мамка", "файл.jpg")
'разные варианты
filePath = System.IO.Path.Combine("C:\", "только папка", "файл.jpg")
filePath = System.IO.Path.Combine("C:\любой путь\любой", "файл.jpg")
filePath = System.IO.Path.Combine("C:\", "файл.jpg")
'и т.п.
Request.PhysicalApplicationPath
Функция Server.MapPath позволит получить любой физический путь относительно корневого каталога:
Dim filePath As String = Server.MapPath("~/") 'корень
'или
filePath = Server.MapPath("~/uploads") 'папка uploads в корневом каталоге сайта
'или
filePath = Server.MapPath("~/uploads/images") 'папка images в папке uploads корневого каталога сайта
'и т.п.
 
Ответ # 5 # · +  +  дата добавления: 06.06.2015 / 20:17
Автор ответа:
anka_x
anka_x
тем: 8 / ответов: 61 / благодарностей: 0 / репутация: 4
ответов: 61
создал(а) тем: 8


Спасибо, Алексей!
Сейчас получилось вот что:

For I As Integer = 0 to frmFileUpload.PostedFiles.Count-1
	Dim FileName As String = "test_" & I & ".jpg"
    Dim MyEncoder As System.Drawing.Imaging.Encoder = System.Drawing.Imaging.Encoder.Quality
    Dim MyEncoderParameter As System.Drawing.Imaging.EncoderParameter
    Dim MyEncoderParameters As New System.Drawing.Imaging.EncoderParameters(1)
    Dim MyImageCodecInfo As System.Drawing.Imaging.ImageCodecInfo = GetEncoderInfo(System.Drawing.Imaging.ImageFormat.Jpeg)
		MyEncoderParameter = New System.Drawing.Imaging.EncoderParameter(MyEncoder, CType(90L, Integer))
		MyEncoderParameters.Param(0) = MyEncoderParameter
		
    Dim IMG As System.Drawing.Image = System.Drawing.Image.FromStream(frmFileUpload.PostedFile.InputStream)
		IMG.Save(Request.PhysicalApplicationPath & "000\" & FileName, MyImageCodecInfo, MyEncoderParameters)
	Next


Беда в том, что при загрузке трех файлов три раза сохраняется самый первый файл... Куда бы вставить переменную "I", чтобы сохранялись три разные файла??? Что-то не вставляется никуда...
 
Ответ # 6 # · +  +  дата добавления: 06.06.2015 / 20:35
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


FrmFileUpload.PostedFiles(I).InputStream
 
Ответ # 7 # · +  +  дата добавления: 06.06.2015 / 20:47
Автор ответа:
anka_x
anka_x
тем: 8 / ответов: 61 / благодарностей: 0 / репутация: 4
ответов: 61
создал(а) тем: 8


Что же эта буковка s все время теряется... )))
Спасибо!!! Сейчас все зарабоало как надо. )
 
Страница: 1 + Создать новую тему