Saya dulu memiliki metode ini dalam proyek, tetapi baru -baru ini ada masalah dengan klien. Rekan saya mengatakan bahwa metode ini tidak pernah berhasil. Jadi, dan saya membutuhkan waktu satu hari untuk mengeluarkan metode ini (saya pikir butuh sedikit lebih lama) dan membagikannya.
Kode dan Tes Kasus:
var http = membutuhkan ('http'); var path = membutuhkan ('path'); var fs = membutuhkan ('fs'); fungsi postfile (fILEKEYVALUE, req) {var BoundaryKey = Math.random (). ToString (16); var endData = '/r/n ----' + BoundaryKey + '-'; var file = array baru (); for (var i = 0; i < fileKeyValue.length; i++) { var content = "/r/n----" + boundaryKey + "/r/n" + "Content-Type: application/octet-stream/r/n" + "Content-Disposition: form-data; name=/"" + fileKeyValue[i].urlKey + "/"; filename=/"" + path.baseName (FileKeyValue [i] .urlValue) + "/"/r/n " +" pengodean-transfer konten: biner/r/n/r/n "; var contentBinary = buffer baru (konten, 'UTF-8'); // Saat pengkodean adalah ASCII, Cina akan dibumbui. file.push ({contentBinary: ContentBinary, FilePath: FileKeyValue [i] .urlValue}); } var contentLength = 0; untuk (var i = 0; i <file.length; i ++) {var stat = fs.statsync (file [i] .filePath); contentLength += file [i] .contentBinary.length; ContentLength += stat.size; } req.setHeader ('tipe konten', 'multipart/form-data; batas =-' + batas); req.setHeader ('konten-panjang', contentLength + buffer.bytelength (endData)); // mengeluarkan parameter var fileIndex = 0; var doonefile = function () {req.write (file [fileIndex] .contentBinary); var filestream = fs.createreadStream (file [fileIndex] .filePath, {bufferSize: 4 * 1024}); filestream.pipe (req, {end: false}); filestream.on ('end', function () {fileIndex ++; if (fileIndex == file.length) {req.end (endData);} else {dooneFile ();}}); }; if (fileIndex == file.length) {req.end (endData); } else {doonefile (); }} // test case // http: //nodejs.org/api/http.html#http_http_request_options_callbackvar file = [{urlkey: "file1,"}}}}} {{{{URLKEA (//DFBF.JPG " "E: //1.jpg"}, {urlkey: "File3", urlvalue: "e: // spasi pro chines.mp3"}] var options = {host: "localhost", port: "8908", metode: "post", path: "/home/unggah"}} var req = http. " res); console.log ('Masalah dengan permintaan:' + e.message); console.log ("selesai");Untuk pengujian server, gunakan MVC untuk menulis metode unggahan pada pengontrol rumah, dan melintasi file yang diunggah dan menyimpannya di hard disk.
Hanya saja akan ada masalah dengan mengunggah file besar. Diperkirakan bahwa server perlu dikonfigurasi, jadi jangan khawatir untuk saat ini.
Metode sisi server (tulis di bawah pengontrol rumah)
[Httppost] unggah string publik () {// httppostedfilebase file = this.request.files ["file"]; //file.saveas(file.filename); foreach (file string di this.request.files) {this.Request.files [file] .saveas (@"e:/folder baru/" + this.Request.files [file] .fileName); } return @"Simpan jalur sukses: e:/folder baru/"; }Jalankan skrip:
node nodeJspostfile.js
Hasil Menjalankan: