ฉันเคยมีวิธีนี้ในโครงการ แต่เมื่อเร็ว ๆ นี้มีปัญหากับลูกค้า เพื่อนร่วมงานของฉันบอกว่าวิธีนี้ไม่เคยทำงาน ดังนั้นและฉันใช้เวลาหนึ่งวันในการกำจัดวิธีนี้ (ฉันคิดว่ามันใช้เวลานานกว่านี้) และแบ่งปัน
รหัสและกรณีทดสอบ:
var http = require ('http'); var path = ต้องการ ('path'); var fs = ต้องการ ('fs'); ฟังก์ชั่น postfile (filekeyValue, req) {var boundarykey = math.random (). toString (16); var enddata = '/r/n ----' + BoundaryKey + '-'; var files = new Array (); สำหรับ (var i = 0; i <fileKeyValue.length; i ++) {var content = "/r/n ----" + BoundaryKey + "/r/n" + "เนื้อหาประเภท: แอปพลิเคชัน/octet-stream/r/n" + "เนื้อหา-" form-data; name = "" path.basename (filekeyValue [i] .URLVALUE) + "/"/r/n " +" การถ่ายโอนเนื้อหา: การเข้ารหัส: ไบนารี/r/n/r/n "; var contentBinary = บัฟเฟอร์ใหม่ (เนื้อหา, 'UTF-8'); // เมื่อการเข้ารหัสเป็น ASCII, ภาษาจีนจะถูกอ่านไม่ออก files.push ({contentbinary: contentbinary, filepath: filekeyvalue [i] .urlvalue}); } var contentLength = 0; สำหรับ (var i = 0; i <files.length; i ++) {var stat = fs.statsync (ไฟล์ [i] .filepath); contentLength += ไฟล์ [i] .contentbinary.length; ContentLength += stat.size; } req.setheader ('content-type', 'multipart/form-data; boundary =-' + BoundaryKey); req.setheader ('ความยาวเนื้อหา', contentLength + buffer.bytelength (enddata)); // ออกพารามิเตอร์ var fileindex = 0; var doonefile = function () {req.write (ไฟล์ [fileindex] .ContentBinary); var fileStream = fs.createReadStream (ไฟล์ [fileindex] .filepath, {buffersize: 4 * 1024}); filestream.pipe (req, {end: false}); filestream.on ('end', function () {fileindex ++; if (fileindex == files.length) {req.end (enddata);} else {doonefile ();}}); - if (fileindex == files.length) {req.end (enddata); } else {doonefile (); }} // กรณีทดสอบ // http: //nodejs.org/api/http.html#http_http_request_options_callbackvar ไฟล์ = [{urlkey: "file1", urlvalue: "e: //dfbf.jpg" "e: //1.jpg"}, {urlkey: "file3", urlvalue: "e: // pro space chinese.mp3"}] var oppical = {โฮสต์: "localhost", พอร์ต: "8908", วิธี: "โพสต์", เส้นทาง: "/บ้าน/อัปโหลด"} Res); console.log ('สถานะ:' + res.statuscode); console.log ('ปัญหาที่มีการร้องขอ:' + e.message); console.log (e);}) postfile (ไฟล์, req); console.log ("เสร็จสิ้น");สำหรับการทดสอบเซิร์ฟเวอร์ให้ใช้ MVC เพื่อเขียนวิธีการอัปโหลดบนตัวควบคุมที่บ้านและสำรวจไฟล์ที่อัปโหลดและบันทึกไว้บนฮาร์ดดิสก์
เป็นเพียงว่าจะมีปัญหากับการอัปโหลดไฟล์ขนาดใหญ่ คาดว่าเซิร์ฟเวอร์จะต้องมีการกำหนดค่าดังนั้นไม่ต้องกังวลกับมันในตอนนี้
วิธีการฝั่งเซิร์ฟเวอร์ (เขียนภายใต้ Home Controller)
[httppost] การอัปโหลดสตริงสาธารณะ () {// httppostedFileBase ไฟล์ = this.request.files ["ไฟล์"]; //file.saveas(file.filename); foreach (ไฟล์สตริงใน this.request.files) {this.request.files [ไฟล์] .saveas (@"e:/โฟลเดอร์ใหม่/" + this.request.files [ไฟล์] .filename); } return @"บันทึกเส้นทางความสำเร็จ: e:/โฟลเดอร์ใหม่/"; -เรียกใช้สคริปต์:
โหนด nodejspostfile.js
ผลการทำงาน: