(Pendahuluan: pertanyaan ini adalah tentang ASP.NET MVC 3.0 yang dirilis pada 2011 , ini bukan tentang ASP.NET Core 3.0 yang dirilis pada 2019)
Saya ingin mengunggah file di asp.net mvc. Bagaimana saya bisa mengunggah file menggunakan input file
kontrol html ?
c#
asp.net-mvc
asp.net-mvc-3
pengguna637197
sumber
sumber
Jawaban:
Anda tidak menggunakan kontrol input file. Kontrol sisi server tidak digunakan dalam ASP.NET MVC. Lihat posting blog berikut yang menggambarkan cara mencapai ini di ASP.NET MVC.
Jadi, Anda akan mulai dengan membuat formulir HTML yang akan berisi input file:
dan kemudian Anda akan memiliki controller untuk menangani unggahan:
sumber
<httpRuntime maxRequestLength="x" />
di web.config Anda, di mana x adalah jumlah KB yang diizinkan untuk diunggah.Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })
. Ini berguna jika ini adalah tampilan sebagian yang dipanggil dari tampilan banyak orang tua (atau serupa).untuk ditransfer ke
byte[]
(misalnya untuk disimpan ke DB):Untuk mentransfer aliran input langsung ke database, tanpa menyimpannya di memori, Anda dapat menggunakan kelas ini yang diambil dari sini dan sedikit berubah:
dan penggunaannya:
sumber
using (MemoryStream ms = new MemoryStream()) { /* ... */ }
File.ReadAllBytes
Metode alternatif untuk mentransfer ke byte [] (untuk disimpan ke DB).
Metode @ Arthur berfungsi cukup baik, tetapi tidak menyalin dengan sempurna sehingga dokumen MS Office mungkin gagal dibuka setelah mengambilnya dari database. MemoryStream.GetBuffer () dapat mengembalikan byte kosong ekstra di akhir byte [], tetapi Anda dapat memperbaikinya dengan menggunakan MemoryStream.ToArray () sebagai gantinya. Namun, saya menemukan alternatif ini berfungsi dengan baik untuk semua jenis file:
Ini kode lengkap saya:
Kelas Dokumen:
Unduh File:
Unggah File:
Lihat (cuplikan):
sumber
Seringkali Anda ingin melewatkan viewmodel juga, dan bukan hanya satu file. Dalam kode di bawah ini Anda akan menemukan beberapa fitur berguna lainnya:
Itu bisa dilakukan melalui kode berikut:
Pastikan sudah
dalam pandangan Anda untuk kesalahan validasi.
Perlu diingat juga bahwa panjang permintaan maksimum default adalah 4MB (maxRequestLength = 4096), untuk mengunggah file yang lebih besar Anda harus mengubah parameter ini di web.config:
(40960 = 40 MB di sini).
Batas waktu eksekusi adalah seluruh jumlah detik. Anda mungkin ingin mengubahnya untuk memungkinkan unggahan file besar.
sumber
Dalam tampilan:
sedangkan kode berikut di controller:
sumber
Saya harus mengunggah file dalam potongan file 100 kb dan yang terakhir dari penyimpanan file unggah dalam database menggunakan perintah. Saya harap, ini akan membantu Anda.
Javascript (Knockout Js)
Kode HTML:
sumber
Bagaimana saya melakukan saya cukup banyak seperti di atas tidak menunjukkan kode saya dan bagaimana menggunakannya dengan DB MYSSQL ...
Tabel dokumen dalam DB -
int Id (PK), Url string, Deskripsi string, CreatedBy, TenancyId DateUploaded
ID kode di atas, menjadi kunci Utama, URL menjadi nama file (dengan tipe file di bagian akhir), deskripsi file ke ouput pada tampilan dokumen, Dibuat oleh yang mengunggah file, tenancyId, dateUploaded
di dalam tampilan Anda harus mendefinisikan enctype atau itu tidak akan berfungsi dengan benar.
Kode di atas akan memberi Anda tombol browse, kemudian di dalam proyek saya, saya memiliki kelas yang pada dasarnya bernama IsValidImage yang hanya memeriksa ukuran file di bawah ukuran maksimal yang Anda tentukan, memeriksa apakah ini file IMG, ini semua dalam fungsi bool kelas. Jadi jika benar mengembalikan benar.
Jadi di controller:
sumber
sumber
Memberikan Solusi lengkap
Input input pertama kali digunakan. CShtml dalam Tampilan MVC
Sekarang panggil panggilan Ajax
Kontroler Panggilan Json
sumber
Saya memberi Anda metode sederhana dan mudah untuk dipahami dan dipelajari.
Pertama, Anda harus menulis kode berikut dalam file .Cshtml Anda .
kemudian di controller Anda masukkan kode berikut:
Untuk ini, Anda harus membuat lapisan BAL dan DAL sesuai Database Anda.
sumber
Ini contoh kerja saya:
sumber
harap perhatikan kode ini hanya untuk mengunggah gambar . Saya menggunakan HTMLHelper untuk mengunggah gambar. dalam file cshtml cantumkan kode ini
lalu buat tag HTMLHelper untuk Unggah
dan akhirnya di Action Unggah file Anda
sumber
sumber
unggah file menggunakan formdata
file .cshtml
Kode sisi server
sumber
Cara sederhana untuk menyimpan banyak file
cshtml
Pengendali
sumber
Karena saya telah menemukan masalah mengunggah file di browser IE saya sarankan untuk menanganinya seperti ini.
Melihat
Pengendali
sumber
Html:
Kode di Belakang:
sumber
Lihat solusi saya
tambahkan fungsi-fungsi ini di Anda
base controller
sehingga Anda dapat menggunakannyaall controllers
checkout bagaimana cara menggunakannya
dan ini adalah contoh lengkapnya
sumber
Di Kontroler
Dalam penglihatan
Di Kelas Modal
Buat folder sebagai unggahan di folder Konten dalam proyek
sumber
Sebagian besar jawaban tampaknya cukup sah meskipun saya melakukan proyek sampel untuk Anda di donnetfiddle
Saya menggunakan LumenWorks.Framework untuk pekerjaan CSV tetapi tidak harus dimiliki.
Demo
Melihat
Pengendali:
sumber
Saya menghadapi kesalahan yang sama saat saya melakukan konsep mengunggah file. Saya tahu banyak jawaban yang diberikan oleh pengembang untuk pertanyaan ini.
Meskipun mengapa saya menjawab pertanyaan ini adalah, telah mendapatkan kesalahan ini dengan kesalahan lalai yang disebutkan di bawah ini.
Saat memberikan atribut nama, pastikan bahwa parameter pengontrol Anda juga memiliki nilai nama yang sama "uploadFile". Seperti ini :
kalau tidak, itu tidak akan dipetakan.
sumber