หมายเหตุ: อัปโหลดด้วย Ajax ไฟล์ไม่ใหญ่เกินไปมันเป็นการดีที่สุดที่จะน้อยกว่าสามหรือสี่ร้อยล้านล้านเนื่องจากคำขอ AJAX ต่อเนื่องมากเกินไปจะยุบพื้นหลังและข้อมูลใน InputStream จะว่างเปล่าโดยเฉพาะในระหว่าง Google การทดสอบเบราว์เซอร์
1. ไฟล์การอ่านเซ็กเมนต์ง่าย ๆ คือ blob, Ajax อัปโหลดไปยังเซิร์ฟเวอร์
<div class = container> <div class = panel-default> <div class = panel-heading> ไฟล์การอ่าน: </div> <div class = panel-body> <input type = file id = ไฟล์ /> <blockquote Style = Word-Break: break-all;> </blockquote> </div> </div> </div>
JS:
/** ไฟล์การแบ่งส่วนเป็น blobs และอัปโหลดไปยังเซิร์ฟเวอร์* เซ็กเมนต์เพื่ออัปโหลดไฟล์ exe ด้วย AJAX จะโยนข้อยกเว้น* /var filebox = document.getElementById ('ไฟล์'); 0]; ; {console.info ('โหลด:' + culoaded + 'ปัจจุบัน:' + โหลด); 'ทั้งหมด:' + (วันที่ใหม่ (). getTime () - starttime.getTime ()) / 1000); // ระบุตำแหน่งเริ่มต้นและตำแหน่งการอ่านตำแหน่ง //console.info_start: ' + เริ่มต้น); (blob);} // เริ่มอ่าน readblob (0); Server Var Fd = New FormData (); ); var data = eval ( + xhr.responsetext + ');
รหัสพื้นหลัง:
/// <summary> /// upload2 คำแนะนำบทคัดย่อ /// </summary> คลาสสาธารณะ upload2: ihttphandler {loghelper.loghelper_log = ใหม่ loghelper.loghelper (); int ount = 0; = บริบท; // รับไฟล์ httprequest repk = _context.request; ; .toint32 (req.form [โหลด]); _file.InputStream; );; WriteLine (TotalCount + DataOne.Length) .tring ()); คืนจริง;}}
2. อ่านไฟล์ในส่วนไปที่ BLOB และอัปโหลดไปยังเซิร์ฟเวอร์ด้วย AJAX
<div class = container> <div class = panel-default> <div class = panel-heading> ไฟล์การอ่าน: </div> <div class = panel-body> <input type = file id = ไฟล์ /> <br /> <อินพุตประเภท = ค่าปุ่ม = onclight = stop (); /ความคืบหน้า> <blockquote id = state style = word-break: break-all;> </blockquote> </div> </div>
JS:
/** ไฟล์การแบ่งส่วนเป็น blobs และอัปโหลดไปยังเซิร์ฟเวอร์โดย AJAX* ใช้ AJAX เพื่อส่งขนาดไฟล์ข้อมูลอัปโหลด การเชื่อมต่อยาวหรือ websocket */var filebox = document.getElementById ('ไฟล์'); null; ); E.Loaded; ถ้า enableRead == เท็จ) ส่งคืน false; -current: ' + โหลด); ) ค่า = เปอร์เซ็นต์;});} // เริ่มอ่าน readblob (0); fd.append ('file', blob); โพสต์ ',' ../ashx/upload2.ashx ', true); (xhr.status == 500) {//console.info ('ข้อผิดพลาดคำขอ,' + xhr.responsetext); }} // ระบุตำแหน่งเริ่มต้นอ่านฟังก์ชั่นไฟล์ readblob (เริ่มต้น) {// ระบุตำแหน่งเริ่มต้นและตำแหน่งสุดท้าย, อ่านไฟล์ var blob = file.slice (เริ่มต้น, เริ่ม + ขั้นตอน); );} // ระงับฟังก์ชันหยุด () {// console.info ('หยุด, culoaded:' + culoaded); ดำเนินการต่อ culoaded: 'culoaded);
รหัสพื้นหลังที่มีด้านบน
3. อ่านไฟล์ในส่วนไปยังอาร์เรย์ไบนารีและอัปโหลดไปยังเซิร์ฟเวอร์ด้วย AJAX
การใช้อาร์เรย์ไบนารีต่ำเป็นพิเศษและไฟล์สุดท้ายจะเบี่ยงเบนไปเล็กน้อยด้วยขนาดดั้งเดิม
เนื้อหา HTML เหมือนกับข้างต้น
JS:
/** ไฟล์การอ่านแบบแบ่งส่วน SEG เป็นอาร์เรย์ไบนารีและอัปโหลดไปยังเซิร์ฟเวอร์โดย AJAX เพื่อใช้วิธีการส่งผ่านโดยใช้อาร์เรย์ไบนารี = document.getElementById ('file'); ของการอ่านหมายเลขทั้งหมด var foot = null; ) // หากมีการกำหนดค่าหลายครั้งข้อมูลจะหายไป วันที่ใหม่ (); / อัปโหลดข้อมูลเซ็กเมนต์ไปยังเซิร์ฟเวอร์ uploadfile (ผลลัพธ์, cuload ed, function () {console.info ('โหลด:' + culoaded + '---- ปัจจุบัน:' + โหลด); // ถ้ายังไม่เสร็จ = โหลด; ถ้า (culoaded <total) {oaded);} else {console.log ('เวลาทั้งหมด:' + (วันที่ใหม่ (). getTime () - starttime.getTime ()) /1000); } // แสดงผลความคืบหน้า = (culoaded / total) * 100; เริ่มอ่าน Server Var = ใหม่สำหรับ MDATA (); (); xhr.open ('โพสต์', '../as. hx/ upload3 {// console.info (xhr.responsetext); ถ้า (onsuccess) onsuccess ();} อื่นถ้า (xhr.status == 500) {console.info ('ข้อผิดพลาดของเซิร์ฟเวอร์'); / เริ่มส่ง xhr.send (fd);}} // ระบุตำแหน่งเริ่มต้น , culoaded: 'culoaded);
รหัสพื้นหลัง:
/// <summary> /// upload3 คำแนะนำบทคัดย่อ /// </summary> คลาสสาธารณะ upload3: ihttphandler {loghelper.loghelper_log = ใหม่ loghelper.loghelper (); int ount = 0; = บริบท; // รับไฟล์ httprequest repk = _context.request; (q)) ',') เป็นประเภท int ปัญหาที่ใหญ่ที่สุดคือ 1.99999999990686774G int โหลด = Convert.toint32 (req.form [โหลด]); NEWNAME += FILENAME; fs.write (dataone, 0, dataOne.length);} ในที่สุด {fs.close ();} _log.writeline); writestr (string str) {httpcontext.response.write (str);} public bool isre ใช้ {get {return false;}}}}สรุป
ข้างต้นคือไฟล์ HTML5 Domain+Filerereader อ่านไฟล์และอัปโหลดไปยังเซิร์ฟเวอร์ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Vevb Wulin!