หลังจากอ่านโพสต์ทั้งหมดเกี่ยวกับการอัปโหลดไฟล์ขนาดใหญ่ใน csdn ฉันก็เขียนขยะชิ้นนี้ -
มีหลายวิธีในการอัปโหลดไฟล์ขนาดใหญ่:
1. วิธี HttpWorkerRequest ของ Sigui นั้นยากเกินกว่าจะเข้าใจ :-(
2. ใช้การควบคุมของบุคคลที่สาม AspNetUpload เพื่อขอเงิน! - ลืมไปเถอะ เรายังชอบอิสระอยู่นะ
3. แก้ไขไฟล์ web.config แต่ไม่สามารถตรวจจับข้อผิดพลาดได้
4. อัพโหลดผ่าน ftp เซิร์ฟเวอร์จำเป็นต้องให้บริการ ftp
เราไม่มีทางเลือกอื่นนอกจากเลือกทางที่สาม ใครทำให้เราโง่ขนาดนี้! (มันโง่เกินไป ไม่สำคัญ คุณควรกินปลามากขึ้น ฉันได้ยินมาว่าการกินปลาสามารถทำให้คุณฉลาดขึ้นได้)
จากนั้นศึกษาวิธีที่สามอย่างระมัดระวัง!
แก้ไขไฟล์ Webcong:
<system.เว็บ>
<httpรันไทม์ maxRequestLength = "40690"
useFullyQualifiedRedirectUrl = "จริง"
การดำเนินการหมดเวลา = "6000"
useFullyQualifiedRedirectUrl = "เท็จ"
minFreeThreads = "8"
minLocalRequestFreeThreads = "4"
appRequestQueueLimit = "100"
EnableVersionHeader = "จริง"
-
</system.web>
ในบรรดาสิ่งเหล่านั้น สิ่งที่เกี่ยวข้องอย่างใกล้ชิดกับการอัพโหลด ได้แก่:
maxRequestLength
ระบุขนาดอัพโหลดไฟล์สูงสุดที่ ASP.NET รองรับ
ขีดจำกัดนี้สามารถใช้เพื่อป้องกันการปฏิเสธการโจมตีบริการที่เกิดจากผู้ใช้ส่งไฟล์จำนวนมากไปยังเซิร์ฟเวอร์
ขนาดที่ระบุอยู่ในหน่วย KB
ค่าเริ่มต้นคือ 4096 KB (4 MB)
การดำเนินการหมดเวลา
ระบุจำนวนวินาทีสูงสุดที่คำขอได้รับอนุญาตให้ดำเนินการก่อนที่จะถูกปิดโดยอัตโนมัติโดย ASP.NET
มีหน่วยเป็นวินาที ตั้งค่านี้เป็นค่าที่มากขึ้นเมื่ออัปโหลดไฟล์ขนาดใหญ่
หากหน่วยความจำเซิร์ฟเวอร์คือ 512M จะสามารถอัปโหลดไฟล์ขนาด 160M ได้ (ฉันไม่ได้ลอง นี่เป็นความเห็นที่เป็นเอกฉันท์ของหลาย ๆ โพสต์ใน csdn)
'www.downcodes.com'
ณ จุดนี้ การตั้งค่าของ web.config สิ้นสุดลงแล้ว
อย่างไรก็ตาม เมื่อขนาดของไฟล์ที่อัพโหลดเกินช่วงขนาดไฟล์ที่ตั้งไว้ ข้อผิดพลาดต่อไปนี้จะเกิดขึ้น:
ไม่สามารถแสดงเพจได้ เพจที่คุณต้องการดูไม่สามารถใช้งานได้ในขณะนี้ เว็บไซต์อาจประสบปัญหาทางเทคนิคหรือคุณอาจต้องปรับการตั้งค่าเบราว์เซอร์ของคุณ
แม้ว่าจะไม่สามารถแก้ไขได้ แต่เรายังคงต้องจับข้อผิดพลาดนี้! จะทำอย่างไร?
ฉันกินปลาไปสองสามตัวเมื่อเร็ว ๆ นี้และคิดเกี่ยวกับมัน เนื่องจากข้อผิดพลาดนี้เป็นข้อผิดพลาดเบื้องหน้าที่เกิดจากการควบคุมไฟล์ จึงเป็นไปไม่ได้ที่จะใช้ try...catch เพื่อจับมันในเบื้องหลัง
ดังนั้นฉันจึงคิดว่าจะใช้กลไกหน้าจับข้อผิดพลาดของ .NET เพื่อจัดการมัน มันเป็นไปได้.
1. ตั้งค่า web.config ก่อน
<customErrors mode="เปิด"/>
2. สร้างไฟล์ error.aspx ใหม่เพื่อการตรวจจับข้อผิดพลาดโดยเฉพาะ
3. เพิ่มคำสั่งหน้าลงในหน้าแรกของหน้า aspx ที่มีการอัปโหลดไฟล์ ErrorPage = "UploadError.aspx"
4. เพิ่มโค้ดบางส่วนลงใน error.aspx เพื่อตรวจสอบว่าข้อความแสดงข้อผิดพลาดเป็นข้อผิดพลาดเบื้องหน้าที่เกิดจากไฟล์หรือไม่
คลาสสาธารณะ UploadError: System.Web.UI.Page
-
โมฆะส่วนตัว Page_Load (ผู้ส่งวัตถุ System.EventArgs e)
-
ข้อยกเว้น เช่น = Server.GetLastError();
ถ้า (เช่น != null)
-
Response.Redirect("../error.aspx");
-
else //ข้อผิดพลาดเบื้องหน้า เช่น เป็นค่าว่าง
-
Response.Redirect("uploadexcel.aspx?err=1"); // ข้ามไปที่หน้าอัปโหลดอีกครั้งและเพิ่มพารามิเตอร์ err เพื่อแสดงข้อความแสดงข้อผิดพลาด
-
-
5. แสดงข้อความแสดงข้อผิดพลาด
uploadexcel คลาสสาธารณะ: System.Web.UI.Page
-
โมฆะส่วนตัว Page_Load (ผู้ส่งวัตถุ System.EventArgs e)
-
ถ้า (คำขอ ["ผิดพลาด"] == "1")
-
Page.RegisterStartupScript("budget","<script language = javascript>alert('การอัปโหลดไฟล์ล้มเหลว ! ขนาดไฟล์ใหญ่เกินไป !')</script>");
-
-
-
6. ทำให้มันเสร็จและโทรหามันสักวัน (ปลาตัวนี้ไม่ฟรี)
หลังจากแก้ไขข้างต้นแล้ว การอัพโหลดจะกลายเป็นโปรแกรมระบุขนาดไฟล์ หากเกิน จะมีข้อความแสดงข้อผิดพลาดปรากฏขึ้น
ด้วยวิธีนี้มันจะดีกว่ามาก อย่างน้อยฉันก็ยอมรับได้ และจะไม่ยากเกินไปที่จะอธิบายให้ผู้ใช้ฟัง