Saya mengalami masalah di tempat kerja sebelumnya. Ketika jumlah data yang dikirim melalui formulir banyak, kesalahan akan dilaporkan. Saat memeriksa MSDN, kami mengetahui bahwa alasannya adalah Microsoft membatasi data maksimum yang dapat diterima menggunakan Request.Form() hingga 100K byte. Microsoft merekomendasikan penggunaan Request.BinaryRead() untuk membaca data formulir, tetapi karena metode ini membaca data biner, data yang dibaca perlu dianalisis byte demi byte untuk menghasilkan string yang bermakna (program di MSDN ditulis dengan cara ini, tetapi ternyata tidak tidak memperhitungkan bahwa karakter yang lolos seperti tanda baca memerlukan analisis khusus). Jika metode ini hampir tidak dapat digunakan untuk sistem bahasa Inggris murni, maka akan sangat merepotkan untuk sistem bahasa Mandarin, karena karakter bahasa Mandarin diwakili oleh dua byte, dan data biner yang dibaca itu sendiri tidak dapat menentukan apakah itu karakter bahasa Inggris atau bahasa Mandarin (jika tidak maka akan demikian bukan data biner, melainkan string ^-^). Dalam hal ini, Anda harus memahami aturan pengkodean karakter Cina untuk melakukan analisis. Terakhir, meskipun algoritme dapat menganalisis semua ini, pikirkan seberapa efisien menganalisis string raksasa tingkat MB byte demi byte? Oleh karena itu, jalan ini diblokir!
Namun, selalu ada jalan. Awalnya saya mengira total data formulir tidak boleh melebihi 100KB, namun kemudian saya mengetahui bahwa ini adalah batasan untuk setiap kolom di formulir. Solusi untuk masalah ini adalah untuk domain yang perlu mengirim data besar, pisahkan data menjadi beberapa bagian lebih kecil dari batas sebelum mengirimkan formulir, letakkan di beberapa kolom tersembunyi, hapus kolom asli secara bersamaan, lalu menyerahkan formulir secara resmi. Server masih menggunakan Request.Form() untuk membaca data di setiap bidang tersembunyi, lalu menggabungkannya secara berurutan. Kode utamanya adalah sebagai berikut:
Catatan: Anda perlu menentukan DIV dalam kode HTML di Formulir untuk memasukkan kolom tersembunyi ke dalamnya secara dinamis.
====Kode contoh klien====
Copy kode kodenya sebagai berikut:
<Bahasa SKRIP=javascript>
//Data dipisahkan dan ditempatkan di domain tersembunyi yang sesuai, yang dipicu dalam event onSubmit pada Formulir
fungsi fnPreHandle()
{
var iCount; //Berapa banyak domain yang akan dipecah
var strData; //data asli
var iMaxChars = 50000;//Mengingat karakter Cina adalah byte ganda, jumlah maksimum karakter dalam domain dibatasi hingga 50K
var iBottleNeck = 2000000; //Jika artikel melebihi 2 juta kata, pengguna perlu diminta
var strHTML;//data asli
strData = frmTest.BigField.value;//Jika artikel terlalu panjang, pengguna perlu diingatkan
jika (strData.panjang > iBottleNeck)
{
if (confirm(Artikel yang ingin Anda terbitkan terlalu panjang, disarankan agar Anda membaginya menjadi beberapa bagian dan menerbitkannya secara terpisah./nJika Anda bersikeras untuk mengirimkannya, harap dicatat bahwa akan membutuhkan waktu lama untuk berhasil dikirimkan./ t/nApakah Anda bersikeras untuk mengirimkan?) == false )
kembali salah;
}iCount = parseInt(strData.length / iMaxChars) + 1;//hdnCount mencatat berapa banyak subbidang yang dibagi menjadi bidang data asli
strHTML = <tipe input=nama tersembunyi=hdnCount nilai= + iCount + >;//Buat kode HTML untuk setiap subdomain
untuk (var i = 1; i <= iHitungan; i++)
{
strHTML = strHTML + /n + <tipe masukan=nama tersembunyi=hdnBigField + i + >;
}//Masukkan kode HTML setiap domain tersembunyi secara dinamis ke DIV (divHidden) di Formulir
document.all.divHidden.innerHTML = strHTML;//Tetapkan nilai ke setiap subdomain
untuk (var i = 1; i <= iHitungan; i++)
{
frmTest.elements[hdnBigField + i].value = strData.substring((i - 1) * iMaxChars, i * iMaxChars);
}//Kosongkan kolom data asli
frmTest.BigField.nilai = ;
}
</SKRIP>
====Kode contoh sisi server====
Copy kode kodenya sebagai berikut:
<%
Redupkan strData
Redupkan intFieldCount
Redupkan iintFieldCount = Permintaan.Form(hdnCount)Untuk i=1 Ke intFieldCount
strData = strData & Permintaan.Formulir(hdnBigfield & i)
NextResponse.Tulis strData
%>