Java передает параметры по VALUE и по значению ONLY.
Чтобы сократить длинный короткий текст:
Для тех, кто приходит из C #: нет параметра «out» .
Для тех, кто приходит из PASCAL: нет параметра «var».
blockquote>Это означает, что вы не можете изменить ссылку с самого объекта, но можете всегда изменяйте свойства объекта.
Обходным путем является использование параметра
StringBuilder
вместоString
. И вы всегда можете использовать массивы!
Модуль body-parser
обрабатывает только сообщения JSON и urlencoded, а не multipart (это было бы так, если вы загружаете файлы).
Для multipart вы 'd нужно использовать что-то вроде connect-busboy
или multer
или connect-multiparty
(многопартийное / грозное - это то, что первоначально использовалось в экспресс-курьерское промежуточное ПО). Кроме того, FWIW, я работаю над еще более высоким уровнем над буксиром под названием reformed
. Он поставляется с промежуточным программным обеспечением Express, а также может использоваться отдельно.
Вот что я нашел googling вокруг:
var fileupload = require("express-fileupload");
Который довольно простой механизм для загрузки
app.post("/upload", function(req, res)
{
var file;
if(!req.files)
{
res.send("File was not found");
return;
}
file = req.files.FormFieldName; // here is the field name of the form
file.mv("file.txt", function(err) //Obvious Move function
{
// log your error
});
res.send("File Uploaded");
});
Похоже, ] После просмотра некоторых модулей в ответе mscdex я обнаружил, что по сравнению с body-parser
поддерживал загрузку файлов в Express 3, но поддержка была сброшена для Express 4, когда больше не включалась в Connect как зависимость express-busboy
был намного лучшей альтернативой и ближайшей заменой. Единственные различия, которые я заметил, были в свойствах загруженного файла. console.log(req.files)
с использованием body-parser (Express 3) выводит объект, который выглядит следующим образом: { file:
{ fieldName: 'file',
originalFilename: '360px-Cute_Monkey_cropped.jpg',
name: '360px-Cute_Monkey_cropped.jpg'
path: 'uploads/6323-16v7rc.jpg',
type: 'image/jpeg',
headers:
{ 'content-disposition': 'form-data; name="file"; filename="360px-Cute_Monkey_cropped.jpg"',
'content-type': 'image/jpeg' },
ws:
WriteStream { /* ... */ },
size: 48614 } }
console.log(req.files)
с использованием экспресс-шины (Экспресс 4): { file:
{ field: 'file',
filename: '360px-Cute_Monkey_cropped.jpg',
file: 'uploads/9749a8b6-f9cc-40a9-86f1-337a46e16e44/file/360px-Cute_Monkey_cropped.jpg',
mimetype: 'image/jpeg',
encoding: '7bit',
truncated: false
uuid: '9749a8b6-f9cc-40a9-86f1-337a46e16e44' } }
multer является промежуточным программным обеспечением, которое обрабатывает «multipart / form-data» и magically & amp; делает загруженные файлы и данные формы доступными нам в запросе как request.files и request.body.
установка multer: - npm install multer --save
в .html файл: -
<form method="post" enctype="multipart/form-data" action="/upload">
<input type="hidden" name="msgtype" value="2"/>
<input type="file" name="avatar" />
<input type="submit" value="Upload" />
</form>
в файле .js: -
var express = require('express');
var multer = require('multer');
var app = express();
var server = require('http').createServer(app);
var port = process.env.PORT || 3000;
var upload = multer({ dest: 'uploads/' });
app.use(function (req, res, next) {
console.log(req.files); // JSON Object
next();
});
server.listen(port, function () {
console.log('Server successfully running at:-', port);
});
app.get('/', function(req, res) {
res.sendFile(__dirname + '/public/file-upload.html');
})
app.post('/upload', upload.single('avatar'), function(req, res) {
console.log(req.files); // JSON Object
});
Надеюсь, что это поможет!
express-fileupload
выглядит как единственное промежуточное программное обеспечение, которое все еще работает в наши дни.
В том же примере multer
и connect-multiparty
дают неопределенное значение req.file или req.files , но express-fileupload
работает.
И возникает много вопросов и проблем, связанных с пустым значением req.file / req. файлы .
ПРОБЛЕМА РЕШЕНА !!!!!!!
Выключает функцию storage
, которая НЕ запускается даже один раз. потому что я должен был включить app.use(upload)
в качестве upload = multer({storage}).single('file');
let storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './storage')
},
filename: function (req, file, cb) {
console.log(file) // this didn't print anything out so i assumed it was never excuted
cb(null, file.fieldname + '-' + Date.now())
}
});
const upload = multer({storage}).single('file');
connect-busboy
вместо простоbusboy
. Обновлено мое исходное сообщение с помощью решения. – safwanc 16 April 2014 в 22:03connect-multiparty
лучше всего! – neciu 25 June 2015 в 06:54reformed
все еще находится в стадии разработки? Ваша последняя фиксация на github - с 2014 года ... Кстати, на ваш взгляд, какой лучший модуль для обработки данных мультипартийной формы? Под "лучшим" Я имею в виду лучшую поддержку, и тот, который работает лучше (меньше ошибок), с большим количеством функций и с более длинным будущим. Я выбралmulter
, потому что он казался наилучшим образом поддержанным, но я все же думаю, что он должен быть более поддержан. – nbro 7 December 2015 в 02:57