Bagaimana saya bisa mendapatkan formulir web ASP.net (v3.5) untuk mengirim file menggunakan format lama biasa <input type="file" />
?
Saya tidak tertarik menggunakan kontrol server ASP.net FileUpload.
asp.net
upload
file-upload
Ronnie Overby
sumber
sumber
runat="server"
, ini tidak terlepas dari hal-hal server ASP.NETvar fileUploaded = document.getElementById("myFile").files[0];
dan Anda bahkan bisa mendapatkan byte menggunakanreadAsArrayBuffer
: stackoverflow.com/questions/37134433/… - tetapi apa yang akan Anda lakukan dengan semua byte di sisi klien? OP ingin menghindari komunikasi sisi server kontrol-bukan ASP .NET sama sekali. -1 untukmu.Berikut adalah solusi tanpa bergantung pada kontrol sisi server apa pun, seperti yang dijelaskan OP dalam pertanyaan.
Kode HTML sisi klien:
Metode pemuatan halaman dari upload.aspx:
sumber
Request.Files[0]
alih-alihRequest.Files["UploadedFile"]
dan sementara OP menggunakan ASP .NET langsung dan bukan MVC, jika ada yang ingin menggunakan ini untuk MVC, Anda hanya perluHttpPostedFileBase
bukanHttpPostedFile
.Anda harus menyetel
enctype
atributform
kemultipart/form-data
; kemudian Anda dapat mengakses file yang diunggah menggunakanHttpRequest.Files
koleksi.sumber
gunakan kontrol HTML dengan atribut server runat
Kemudian di asp.net Codebehind
Ada juga beberapa opsi pihak ke-3 yang akan menunjukkan kemajuan jika Anda tertarik
sumber
<asp:FileUpload ID="fileUpload1" runat="server"></asp:FileUpload>
) Itu berbeda dengan mengatakan untuk tidak meletakkanrunat=server
diinput
lapangan.HtmlInputFile
kontrol.Ya, Anda dapat mencapai ini dengan metode posting ajax. di sisi server Anda dapat menggunakan httphandler. Jadi kami tidak menggunakan kontrol server apa pun sesuai kebutuhan Anda.
dengan ajax Anda juga dapat menunjukkan kemajuan unggahan.
Anda harus membaca file tersebut sebagai inputstream.
Kode sampel
sumber
fs.close()
semua yang lain mungkin berakhir di file yang tidak dapat dibaca karena mereka tetap terbuka dalam IIS.Koleksi Request.Files berisi semua file yang diunggah dengan formulir Anda, terlepas dari apakah itu berasal dari kontrol FileUpload atau ditulis secara manual
<input type="file">
.Jadi Anda bisa menulis tag input file lama biasa di tengah WebForm Anda, dan kemudian membaca file yang diunggah dari koleksi Request.Files.
sumber
Karena orang lain memiliki jawaban, Request.Files adalah HttpFileCollection yang berisi semua file yang telah diposting, Anda hanya perlu menanyakan objek itu untuk file seperti ini:
Tetapi apa yang terjadi jika ada lebih dari satu mark-up input dengan nama atribut yang sama:
Di sisi server, kode sebelumnya Request.Files ["myFile"] hanya mengembalikan satu objek HttpPostedFile alih-alih dua file. Saya telah melihat di .net 4.5 metode ekstensi yang disebut GetMultiple tetapi untuk versi sebelumnya tidak ada, dalam hal ini saya mengusulkan metode ekstensi sebagai:
Metode ekstensi ini akan mengembalikan semua objek HttpPostedFile yang memiliki nama "myFiles" di HttpFileCollection jika ada.
sumber
Kontrol HtmlInputFile
Saya telah menggunakan ini sepanjang waktu.
sumber
runat="server"
yang pada dasarnya mengubahnya menjadi kontrol server, yang tidak ingin mereka gunakan.Berikut adalah artikel Proyek Kode dengan proyek yang dapat diunduh yang dimaksudkan untuk menyelesaikan ini. Penafian: Saya belum menguji kode ini. http://www.codeproject.com/KB/aspnet/fileupload.aspx
sumber
sumber