Saya sedang menulis fungsi unggah, dan mengalami masalah saat menangkap "System.Web.HttpException: Panjang permintaan maksimum terlampaui" dengan file lebih besar dari ukuran maksimal yang ditentukan httpRuntime
di web.config (ukuran maks disetel ke 5120). Saya menggunakan sederhana <input>
untuk file tersebut.
Masalahnya adalah bahwa pengecualian dilemparkan sebelum peristiwa klik tombol unggah, dan pengecualian terjadi sebelum kode saya dijalankan. Jadi, bagaimana cara menangkap dan menangani pengecualian?
EDIT: Pengecualian dilemparkan secara instan, jadi saya cukup yakin ini bukan masalah batas waktu karena koneksi yang lambat.
c#
asp.net
httpexception
Marcus L.
sumber
sumber
<input type="file" id="upload" name="upload" onchange="showFileSize();" />
dalamshowFileSize()
, Anda dapat menampilkan pesan kesalahan berdasarkan ukuran file Anda melaluivar input = document.getElementById("upload"); var file = input.files[0];
dan menambahkan tag html.Jawaban:
Sayangnya, tidak ada cara mudah untuk menangkap pengecualian seperti itu. Apa yang saya lakukan adalah mengganti metode OnError di tingkat halaman atau Application_Error di global.asax, lalu periksa apakah itu kegagalan Permintaan Maks dan, jika demikian, transfer ke halaman kesalahan.
Ini peretasan tetapi kode di bawah ini berfungsi untuk saya
sumber
httpException.WebEventCode == WebEventCodes.RuntimeErrorPostTooLarge
- menggunakan System.Web.Management.WebEventCodesSeperti yang dikatakan GateKiller, Anda perlu mengubah maxRequestLength. Anda mungkin juga perlu mengubah executionTimeout jika kecepatan upload terlalu lambat. Perhatikan bahwa Anda tidak ingin salah satu dari pengaturan ini menjadi terlalu besar jika tidak Anda akan terbuka untuk serangan DOS.
Default untuk executionTimeout adalah 360 detik atau 6 menit.
Anda dapat mengubah maxRequestLength dan executionTimeout dengan Elemen httpRuntime .
EDIT:
Jika Anda ingin menangani pengecualian tersebut seperti yang telah dinyatakan, Anda harus menanganinya di Global.asax. Berikut tautan ke contoh kode .
sumber
Anda dapat menyelesaikan ini dengan meningkatkan panjang permintaan maksimum di web.config Anda:
Contoh di atas adalah untuk batas 100Mb.
sumber
Jika Anda menginginkan validasi sisi klien juga sehingga Anda tidak perlu membuang pengecualian, Anda dapat mencoba menerapkan validasi ukuran file sisi klien.
Catatan: Ini hanya berfungsi di browser yang mendukung HTML5. http://www.html5rocks.com/en/tutorials/file/dndfiles/
sumber
Hai solusi yang disebutkan oleh Damien McGivern, Hanya berfungsi di IIS6,
Itu tidak bekerja di IIS7 dan ASP.NET Development Server. Saya mendapatkan halaman yang menampilkan "404 - File atau direktori tidak ditemukan."
Ada ide?
EDIT:
Mengerti ... Solusi ini masih tidak berfungsi di Server Pengembangan ASP.NET, tetapi saya mendapat alasan mengapa itu tidak berfungsi di IIS7 dalam kasus saya.
Alasannya adalah IIS7 memiliki pemindaian permintaan bawaan yang memberlakukan batas file unggahan yang defaultnya adalah 30000000 byte (yang sedikit kurang dari 30MB).
Dan saya mencoba mengunggah file berukuran 100 MB untuk menguji solusi yang disebutkan oleh Damien McGivern (dengan maxRequestLength = "10240" yaitu 10MB di web.config). Sekarang, Jika saya mengunggah file dengan ukuran> 10MB dan <30 MB maka halaman tersebut dialihkan ke halaman kesalahan yang ditentukan. Tetapi jika ukuran file> 30MB maka itu menunjukkan halaman kesalahan built-in jelek yang menampilkan "404 - File atau direktori tidak ditemukan."
Jadi, untuk menghindari hal ini, Anda harus meningkatkan maks. diizinkan meminta panjang konten untuk situs web Anda di IIS7. Itu bisa dilakukan dengan menggunakan perintah berikut,
Saya telah menetapkan maks. panjang konten hingga 200MB.
Setelah melakukan pengaturan ini, halaman berhasil dialihkan ke halaman kesalahan saya ketika saya mencoba mengunggah file berukuran 100MB
Lihat, http://weblogs.asp.net/jgalloway/archive/2008/01/08/large-file-uploads-in-asp-net.aspx untuk lebih jelasnya.
sumber
Berikut cara alternatif, yang tidak melibatkan "peretasan", tetapi membutuhkan ASP.NET 4.0 atau yang lebih baru:
sumber
Salah satu cara untuk melakukan ini adalah dengan mengatur ukuran maksimum di web.config seperti yang telah disebutkan di atas misalnya
kemudian ketika Anda menangani acara unggahan, periksa ukurannya dan jika melebihi jumlah tertentu, Anda dapat menjebaknya misalnya
sumber
Solusi yang berfungsi dengan IIS7 dan yang lebih baru: Menampilkan halaman kesalahan kustom saat unggahan file melebihi ukuran yang diizinkan di ASP.NET MVC
sumber
Di IIS 7 dan seterusnya:
file web.config:
Anda kemudian dapat memeriksa kode di belakang, seperti:
Pastikan saja [Size In Bytes] di web.config lebih besar dari ukuran file yang ingin anda upload maka anda tidak akan mendapatkan error 404. Anda kemudian dapat memeriksa ukuran file dalam kode di belakang menggunakan ContentLength yang akan jauh lebih baik
sumber
Seperti yang mungkin Anda ketahui, panjang permintaan maksimum dikonfigurasi di DUA tempat.
maxRequestLength
- dikontrol di tingkat aplikasi ASP.NETmaxAllowedContentLength
- di bawah<system.webServer>
, dikontrol di tingkat IISKasus pertama tercakup dalam jawaban lain untuk pertanyaan ini.
Untuk menangkap YANG KEDUA Anda perlu melakukan ini di global.asax:
sumber
Setelah tag
tambahkan tag berikut
Anda dapat menambahkan Url ke halaman kesalahan ...
sumber
Anda dapat menyelesaikan ini dengan meningkatkan panjang permintaan maksimum dan waktu eksekusi di web.config Anda:
-Harap Perjelas waktu eksekusi maksimum keluar parutan kemudian 1200
sumber
Bagaimana kalau menangkapnya di acara EndRequest?
sumber
Ini dapat diperiksa melalui:
sumber