Bagaimana cara meningkatkan ukuran file unggahan maks di ASP.NET?

238

Saya memiliki formulir yang mengecualikan unggahan file di ASP.NET. Saya perlu meningkatkan ukuran unggahan maks hingga di atas standar 4 MB.

Saya telah menemukan di beberapa tempat referensi kode di bawah ini di msdn .

[ConfigurationPropertyAttribute("maxRequestLength", DefaultValue = )]

Tidak ada referensi yang benar-benar menggambarkan cara menggunakannya, dan saya telah mencoba beberapa hal tanpa hasil. Saya hanya ingin memodifikasi atribut ini untuk halaman tertentu yang meminta unggah file.

Apakah ini rute yang benar untuk diambil? Dan bagaimana saya menggunakan ini?

Eddie
sumber
Apakah Anda yakin ini adalah batasan kode, dan bukan batasan host? IIS memiliki batas juga.
MrChrister
Saya cukup yakin itu adalah pembatasan .Net. Jawaban di bawah ini berhasil untuk saya.
Eddie

Jawaban:

406

Pengaturan ini berlaku di file web.config Anda. Ini memengaruhi seluruh aplikasi, namun ... Saya rasa Anda tidak bisa mengaturnya per halaman.

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="xxx" />
  </system.web>
</configuration>

"xxx" dalam KB. Standarnya adalah 4096 (= 4 MB).

Eric Rosenberger
sumber
6
Ini membuat saya bekerja untuk situs yang luas. Saya mengaturnya ke 10240 (atau 10 MB) untuk saat ini. Terima kasih!
Eddie
12
Lihat jawaban saya jika Anda menjalankan IIS7 + dan ini tidak berfungsi.
4imble
Apakah mungkin untuk membatasi ini pada satu pengontrol?
Guillermo Varini
@ Eddie saya punya dua file web.config saya menggunakannya di keduanya tetapi tidak berhasil. bagaimana saya bisa melakukannya?
Ahmad
2
Ini dimungkinkan untuk dilakukan pada jalur tertentu juga. <location path = "Api / Controller"> <system.web> <authorization> <izinkan pengguna = "*" /> </authorization> <httpRuntime maxRequestLength = "102400" /> </system.web> </location> (tag otorisasi tidak diperlukan)
nios
182

Untuk IIS 7+, serta menambahkan pengaturan httpRuntime maxRequestLength Anda juga perlu menambahkan:

  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="52428800" /> <!--50MB-->
      </requestFiltering>
    </security>
  </system.webServer>

Atau dalam IIS (7):

  • Pilih situs web yang ingin Anda aktifkan untuk menerima unggahan file besar.
  • Di jendela utama klik dua kali 'Permintaan pemfilteran'
  • Pilih "Edit Pengaturan Fitur"
  • Ubah "Panjang konten maksimum yang diizinkan (byte)"
4imble
sumber
Saya lupa tentang kilobyte: p
Andrew Myhre
10
Anda mungkin perlu mengatur keduanya maxRequestLength dan maxAllowedContentLengthmembuatnya berfungsi ... lihat stackoverflow.com/questions/6327452/…
MikeM
7
@AndrewMyhre maxAllowedContentLength dalam byte, bukan KB. Microsoft docs mengatakan defaultnya adalah 30 MB.
Dan Randolph
1
@DanRandolph sebenarnya defaultnya adalah 30000000 (sekitar 28,6MB), seperti yang didokumentasikan di iis.net/configreference/system.webserver/security/…
aaaantoine
Anda pasti membutuhkan keduanya.
mohrtan
74

Untuk meningkatkan batas ukuran file unggahan, kami memiliki dua cara

1. IIS6 atau lebih rendah

Secara default, di ASP.Net ukuran maksimum file yang akan diunggah ke server adalah sekitar 4MB . Nilai ini dapat ditingkatkan dengan memodifikasi atribut maxRequestLength di web.config .

Ingat: maxRequestLenght ada di KB

Contoh : jika Anda ingin membatasi unggahan hingga 15MB, atur maxRequestLength ke “15360” (15 x 1024).

<system.web>
   <!-- maxRequestLength for asp.net, in KB --> 
   <httpRuntime maxRequestLength="15360" ></httpRuntime> 
</system.web>

2. IIS7 atau lebih tinggi

Cara yang sedikit berbeda digunakan di sini untuk mengunggah file. IIS7 telah memperkenalkan modul pemfilteran permintaan . Yang dijalankan sebelum ASP.Net. Berarti cara kerja pipeline adalah bahwa nilai IIS ( maxAllowedContentLength ) diperiksa terlebih dahulu kemudian nilai ASP.NET ( maxRequestLength ) dicentang. Atribut maxAllowedContentLength default ke 28,61 MB . Nilai ini dapat ditingkatkan dengan memodifikasi kedua atribut di web.config yang sama .

Ingat: maxAllowedContentLength dalam byte

Contoh : jika Anda ingin membatasi unggahan hingga 15MB, atur maxRequestLength ke "15360" dan maxAllowedContentLength ke "15728640" (15 x 1024 x 1024).

<system.web>
   <!-- maxRequestLength for asp.net, in KB --> 
   <httpRuntime maxRequestLength="15360" ></httpRuntime> 
</system.web>

<system.webServer>              
   <security> 
      <requestFiltering> 
         <!-- maxAllowedContentLength, for IIS, in bytes --> 
         <requestLimits maxAllowedContentLength="15728640" ></requestLimits>
      </requestFiltering> 
   </security>
</system.webServer>

Tautan Referensi MSDN : https://msdn.microsoft.com/en-us/library/e1f13641(VS.80).aspx

Malik Khalil
sumber
17

Saya yakin baris ini di web.config akan menetapkan ukuran unggah maks:

<system.web>

        <httpRuntime maxRequestLength="600000"/>
</system.web>
ben
sumber
Setelah menghabiskan setengah hari inilah yang membantu saya !!! Terima kasih banyak !!!
Sagar Khatri
13

untuk batas maksimal 2 GB, di web.config aplikasi Anda:

<system.web>
  <compilation debug="true" targetFramework="4.5" />
  <httpRuntime targetFramework="4.5" maxRequestLength="2147483647" executionTimeout="1600" requestLengthDiskThreshold="2147483647" />
</system.web>

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="2147483647" />
    </requestFiltering>
  </security>
</system.webServer>
cangosta
sumber
7

Jika windows 2003 / IIS 6.0 maka periksa AspMaxRequestEntityAllowed = "204800" di file metabase.xml yang terletak di folder C: \ windows \ system32 \ inetsrv \

Nilai default "204800" (~ 205Kb) menurut saya terlalu rendah untuk sebagian besar pengguna. Ubah saja nilainya menjadi apa yang menurut Anda seharusnya maks.

Jika Anda tidak dapat menyimpan file setelah mengeditnya, Anda harus menghentikan server ISS atau mengaktifkan server untuk memungkinkan pengeditan file:

teks alternatif
(sumber: itmaskinen.se )

Sunting: Saya tidak membaca pertanyaan dengan benar (cara mengatur maxrequest di webconfig). Tetapi informasi ini mungkin menarik bagi orang lain, banyak orang yang memindahkan situs mereka dari win2000-server ke win2003 dan memiliki fungsi unggah yang berfungsi dan tiba-tiba mendapatkan Permintaan. Kesalahan Biner yang Gagal akan menggunakannya. Jadi saya tinggalkan jawabannya di sini.

Stefan
sumber
5

Saya mengalami masalah yang sama dalam server IIS win 2008, saya telah memecahkan masalah dengan menambahkan konfigurasi ini di web.config:

<system.web>
    <httpRuntime executionTimeout="3600" maxRequestLength="102400" 
     appRequestQueueLimit="100" requestValidationMode="2.0"
     requestLengthDiskThreshold="10024000"/>
</system.web>

The requestLengthDiskThreshold secara default adalah 80000 byte sehingga terlalu kecil untuk aplikasi saya. requestLengthDiskThreshold diukur dalam bytes dan maxRequestLength diekspresikan dalam Kbytes.

Masalahnya ada jika aplikasi menggunakan System.Web.UI.HtmlControls.HtmlInputFilekomponen server. Meningkatkan requestLengthDiskThreshold diperlukan untuk menyelesaikannya.

Massimo Zerbini
sumber
1
Menurut msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx "Menentukan batas untuk ambang buffering aliran input stream, dalam kilobyte. Nilai ini tidak boleh melebihi atribut maxRequestLength." jadi harus paling banyak sama dengan panjang permintaan?
Jeff
Ya @Jeff, nilai requestLengthDiskThreshold harus lebih kecil dari maxRequestLength, tetapi yang pertama dinyatakan dalam byte. Jika requestLengthDiskThreshold lebih besar dari maxRequestLength a ConfigurationErrorsException harus dilempar, sehingga Anda dapat menguji nilai yang benar pada Anda sendiri. Lihat forums.asp.net/t/…
Massimo Zerbini
4

Jika Anda menggunakan Framework 4.6

<httpRuntime targetFramework="4.6.1" requestValidationMode="2.0" maxRequestLength="10485760"  />
mbadeveloper
sumber
4

Ukuran file maksimum dapat dibatasi hanya untuk satu Pengontrol MVC atau bahkan untuk sebuah Tindakan.
tag web.config <lokasi> dapat digunakan untuk ini:

<location path="YourAreaName/YourControllerName>/YourActionName>">
  <system.web>
    <!-- 15MB maxRequestLength for asp.net, in KB 15360 -->
    <httpRuntime maxRequestLength="15360" />
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 15MB maxAllowedContentLength, for IIS, in bytes 15728640 -->
        <requestLimits maxAllowedContentLength="15728640" />
      </requestFiltering>
    </security>
  </system.webServer>
</location>

Atau Anda dapat menambahkan entri ini di web.config area sendiri.

Martin
sumber
Ini harus lebih tinggi dan digunakan daripada jawaban yang diterima, karena ini lebih aman untuk memvalidasi ukuran permintaan.
Jonathan Ortega
4

Saya tahu ini pertanyaan lama.

Jadi inilah yang harus Anda lakukan:

Di file web.config Anda, tambahkan ini di <system.web>:

<!-- 3GB Files / in kilobyte (3072*1024) -->
<httpRuntime targetFramework="4.5" maxRequestLength="3145728"/>

dan ini di bawah <system.webServer>:

<security>
    <requestFiltering>

      <!-- 3GB Files / in byte (3072*1024*1024) -->
      <requestLimits maxAllowedContentLength="3221225472" />

    </requestFiltering>
</security>

Anda lihat di komentar bagaimana ini bekerja. Dalam satu Anda perlu memiliki sie dalam byte dan yang lainnya dalam kilobyte. Semoga itu bisa membantu.

Damir
sumber
2

Anda dapat menulis blok kode itu di file web.config aplikasi Anda.

<httpRuntime maxRequestLength="2048576000" />
<sessionState timeout="3600"  />

Dengan menulis kode itu Anda dapat mengunggah file yang lebih besar dari sekarang

pengguna3683243
sumber
0

Jika Anda menggunakan sharepoint, Anda harus mengonfigurasi ukuran maksimal dengan Alat Administratif juga: kb925083

Ulangan
sumber
0

Saya memiliki posting blog tentang cara meningkatkan ukuran file untuk kontrol unggahan asp .

Dari pos:

Secara default, kontrol FileUpload memungkinkan maksimum 4MB file untuk diunggah dan batas waktu eksekusi adalah 110 detik. Properti ini dapat diubah dari dalam bagian httpRuntime file web.config. Properti maxRequestLength menentukan ukuran file maksimum yang dapat diunggah. Properti executTimeout menentukan waktu maksimum untuk eksekusi.

sk1900
sumber
0

Jika berfungsi di mesin lokal Anda dan tidak berfungsi setelah penerapan di IIS (saya menggunakan Windows Server 2008 R2) saya punya solusi.

Buka IIS (inetmgr) Buka situs web Anda Di sebelah kanan, buka Konten (Pemfilteran Permintaan) Pergi ke Edit Pengaturan Fitur Ubah ukuran konten maksimum sesuai (Bytes yang Anda perlukan) Ini akan berfungsi. Anda juga dapat mengambil bantuan dari utas berikut http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits

Rahat Ali
sumber
0

Jika Anda menggunakan ssl cert, pengaturan F5 pipeline ssl Anda konfigurasikan. Penting.

tayfun Kılıç
sumber