У меня есть сценарий на стороне сервера Node.js, который успешно загружает «что-то» в указанный каталог. Но это не мой выбранный файл и ошибка сценария из заявляющей:Node.JS загрузка файлов не сохранение файлов текущее состояние при загрузке
Request received: POST
undefined:1
------WebKitFormBoundary1urLweAWe6T1VpEA
^
SyntaxError: Unexpected number
at Object.parse (native)
at IncomingMessage.<anonymous> (C:\Users\gcampbell\De
p.js:51:33)
at emitOne (events.js:82:20)
at IncomingMessage.emit (events.js:169:7)
at readableAddChunk (_stream_readable.js:153:18)
at IncomingMessage.Readable.push (_stream_readable.js
at HTTPParser.parserOnBody (_http_common.js:124:22)
Вот файл я в конечном итоге в моей директории загрузок.
upload_3b2ab28a59131c95015a90a4afe972cd
Вот часть моих Node.js приложение:
var http = require('http');
var fs = require('fs');
var path = require('path');
var formidable = require('formidable');
var fs = require('fs');
http.createServer(function(req, res) {
console.log('Request received: ' + req.method);
if (req.method == 'GET') {
fs.readFile("comments-data.json", 'utf8', function(err, data) {
if (err) {
return console.log(err);
} else {
res.setHeader("Content-Type", "text/json");
res.setHeader("Access-Control-Allow-Origin", "*");
res.end(data)
}
})
};
if (req.method == 'POST') {
// create an incoming form object
var form = new formidable.IncomingForm();
// specify that we want to allow the user to upload multiple files in a single request
form.multiples = true;
// store all uploads in the /uploads directory
form.uploadDir = path.join(__dirname, '/uploads');
// every time a file has been uploaded successfully,
// rename it to it's orignal name
form.on('file', function(field, file) {
fs.rename(file.path, path.join(form.uploadDir, file.name));
});
// log any errors that occur
form.on('error', function(err) {
console.log('An error has occured: \n' + err);
});
// once all the files have been uploaded, send a response to the client
form.on('end', function() {
res.end('success');
});
// parse the incoming request containing the form data
form.parse(req);
req.on('data', function(chunk) {
var element = JSON.parse(chunk);
fs.readFile("comments-data.json", 'utf8', function(err, json) {
var array = JSON.parse(json);
array.push(element);
fs.writeFile("comments-data.json", JSON.stringify(array), function(err) {
if (err) {
console.log(err);
return;
}
console.log("The file was saved!");
});
});
res.end('{"msg": "success"}');
});
};
Вот мой AJAX вызов:
uploadAttachments: function(commentArray, success, error) {
var responses = 0;
var successfulUploads = [];
var serverResponded = function() {
responses++;
// Check if all requests have finished
if(responses == commentArray.length) {
// Case: all failed
if(successfulUploads.length == 0) {
error();
// Case: some succeeded
} else {
success(successfulUploads)
}
}
}
$(commentArray).each(function(index, commentJSON) {
// Create form data
var formData = new FormData();
$(Object.keys(commentJSON)).each(function(index, key) {
var value = commentJSON[key];
if(value) formData.append(key, value);
});
$.ajax({
url: 'http://localhost:8080',
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false,
success: function(commentJSON) {
successfulUploads.push(commentJSON);
serverResponded();
},
error: function(data) {
serverResponded();
},
});
});
}
Это должно принять POST, хранить файл и обновить данные JSON в файле comments-data.json, чтобы указать, куда ушел новый файл.
Заранее благодарен!
Запрос ajax - это функция обратного вызова, которая используется для загрузки вложений на сервер. Первым параметром обратного вызова является commentArray, включая все вложения в качестве моделей комментариев, в которых в файле содержится файл для загрузки. Сервер должен вернуть URL-адрес загруженного файла в поле fileURL. Обратный вызов обеспечивает как успешные, так и обратные вызовы, которые должны вызываться на основе результата с сервера. Обратный вызов успеха принимает массив успешных загрузок в качестве параметра.
Есть ли у кого-нибудь еще, что может помочь? –