Раньше у меня был этот метод в проекте, но в последнее время была проблема с клиентом. Мой коллега сказал, что этот метод никогда не работал. Итак, и я потратил день, чтобы вытащить этот метод (я думаю, что это заняло немного больше времени) и поделиться им.
Код и тестовые примеры:
var http = require ('http'); var path = require ('path'); var fs = require ('fs'); function postfile (filekeyvalue, req) {var gradarykey = 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" + "content-type: приложение/octet-stream/r/n" + "content-disposition: form-data; name =/" " + fileQueValue [i]. path.basename (filekeyvalue [i] .urlvalue) + "/"/r/n " +" transfer-transfer-encoding: бинарный/r/n/r/n "; var contentBinary = новый буфер (Content, 'UTF-8'); // Когда кодирование-ASCII, китайцы будут искажены. files.push ({contentBinary: contentBinary, filePath: FileKeyValue [i] .UrlValue}); } var contentLength = 0; for (var i = 0; i <files.length; i ++) {var stat = fs.statsync (files [i] .filepath); ContentLength += файлы [i] .contentBinary.length; ContentLength += stat.Size; } req.setheAder ('content-type', 'multipart/form-data; boundary =-' + boundarykey); req.setheader ('content-guide', contentlength + buffer.bytelength (enddata)); // Выпустите параметр var fileIndex = 0; var doonefile = function () {req.write (files [fileIndex] .contentBinary); var fileStream = fs.createrEadStream (files [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 files = [{urlkey: "file1", urlvalue: "e: //dfbf.jpg", {urlke: "e: //dfbf.jpg", {url "E: //1.jpg"}, {urlkey: "file3", urlvalue: "e: // pro Space cilling.mp3"}] var options = {host: "localhost", порт: "8908", метод: "post", path: "/home/upload"} var req = http.Request (options (rel re -rese. Res); console.log ('Проблема с запросом:' + e.message); console.log ("Doning");Для тестирования на сервере используйте MVC, чтобы написать метод загрузки на домашнем контроллере, пройти загруженный файл и сохранить его на жестком диске.
Просто будут проблемы с загрузкой больших файлов. Предполагается, что сервер должен быть настроен, поэтому не беспокойтесь об этом сейчас.
Метод на стороне сервера (запишите под контроллером Home)
[Httppost] public String upload () {// httppostedfilebase file = this.request.files ["file"]; //file.saveas(file.filename); foreach (строковый файл в this.request.files) {this.request.files [file] .saveas (@"e:/new Folder/" + this.request.files [file] .filename); } return @"Сохранить путь успеха: e:/new Polder/"; }Запустите сценарий:
Node nodejspostfile.js
Результаты работы: