Как я могу получить веб-форму ASP.net (v3.5) для публикации файла с помощью простого старого <input type="file" />
?
Меня не интересует использование серверного элемента управления ASP.net FileUpload.
asp.net
upload
file-upload
Ронни Оверби
источник
источник
runat="server"
, он не зависит от серверного материала ASP.NETvar fileUploaded = document.getElementById("myFile").files[0];
и вы даже можете получить байты, используяreadAsArrayBuffer
: stackoverflow.com/questions/37134433/… - но что вы собираетесь делать со всеми этими байтами на стороне клиента? OP хочет полностью избежать взаимодействия ASP .NET на стороне элемента управления, а не на стороне сервера. -1 тебе.Вот решение, не полагающееся на какой-либо элемент управления на стороне сервера, как и OP, описанный в вопросе.
Клиентский HTML-код:
Page_Load метод upload.aspx:
источник
Request.Files[0]
вместо,Request.Files["UploadedFile"]
и пока OP использовал простой ASP .NET, а не MVC, если кто-то хочет использовать это для MVC, вам просто нужноHttpPostedFileBase
вместоHttpPostedFile
.Вам нужно будет установить
enctype
атрибутform
дляmultipart/form-data
; тогда вы можете получить доступ к загруженному файлу, используяHttpRequest.Files
коллекцию.источник
использовать элемент управления HTML с атрибутом сервера runat
Затем в asp.net Codebehind
Есть также несколько сторонних вариантов, которые покажут прогресс, если вам интересно
источник
<asp:FileUpload ID="fileUpload1" runat="server"></asp:FileUpload>
). Это отличается от того, чтобы сказать, что нельзя помещать arunat=server
вinput
поле.HtmlInputFile
control.Да, вы можете добиться этого с помощью метода сообщения ajax. на стороне сервера вы можете использовать httphandler. Поэтому мы не используем никаких серверных элементов управления в соответствии с вашими требованиями.
с помощью ajax вы также можете показать прогресс загрузки.
вам нужно будет прочитать файл как входной поток.
Образец кода
источник
fs.close()
все остальное могло оказаться в нечитаемых файлах, поскольку они каким-то образом остаются открытыми в IIS.Коллекция Request.Files содержит любые файлы, загруженные с вашей формой, независимо от того, пришли ли они из элемента управления FileUpload или вручную написанного
<input type="file">
.Таким образом, вы можете просто написать простой старый тег ввода файла в середине вашей WebForm, а затем прочитать файл, загруженный из коллекции Request.Files.
источник
Поскольку у других есть ответ, Request.Files - это HttpFileCollection, который содержит все файлы, которые были опубликованы, вам нужно только запросить этот объект для файла следующим образом:
Но что произойдет, если существует более одной разметки ввода с одинаковым именем атрибута:
На стороне сервера предыдущий код Request.Files ["myFile"] возвращает только один объект HttpPostedFile вместо двух файлов. Я видел в .net 4.5 метод расширения под названием GetMultiple, но для предыдущих версий он не существует, в этом отношении я предлагаю метод расширения как:
Этот метод расширения вернет все объекты HttpPostedFile, имеющие имя «myFiles» в HttpFileCollection, если таковые существуют.
источник
Элемент управления HtmlInputFile
Я использовал это все время.
источник
runat="server"
которое по сути превращает его в серверный элемент управления, который они не хотели использовать.Вот статья Code Project с загружаемым проектом, который призван решить эту проблему. Отказ от ответственности: я не тестировал этот код. http://www.codeproject.com/KB/aspnet/fileupload.aspx
источник
источник