gpt4 book ai didi

javascript - NodeJs 简单上传文件不返回正确的结果

转载 作者:行者123 更新时间:2023-12-03 06:44:12 25 4
gpt4 key购买 nike

下面的代码是我的 Node.js 上传文件。该代码工作正常,可以从客户端上传任何文件,但上传后,我无法获取上传状态结果。例如在Node.js上,上传文件后,我无法将上传结果发送到客户端。

var socket = require('socket.io');
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = socket.listen(server);
var port = process.env.PORT || 3000;
var mysql = require('mysql');
var multer = require('multer');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'a',
database: 'signal'
});

var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, './uploads');
},
filename: function (req, file, callback) {
callback(null, req.params.storeId);
}
});
var upload = multer({storage: storage}).single('userPhoto');

app.post('/newVitrine/:storeId/:userId', function (req, res) {
upload(req, res, function (err) {
if (err) {
res.send({'result': 0});
console.log({'result': 0});
} else {
res.send({'result': 1});
console.log({'result': 1});
}
});
});

server.listen(port, function () {
console.log('Server listening at port %d', port);
});

客户端应该以 {'result': 1} 形式获取 json 对象,但我得到的是长 json 对象,而 result 不在其中。

最佳答案

简短回答:您无能为力。你可以使用 ajax 并伪造它;让它看起来像预期的那样工作。甚至文件上传服务也能做到这一点 - 例如 transloadit。

这个问题实际上是一个非常普遍的问题,如果 multer 达到大小限制,就会发生这种情况(尽管我的情况有点不同),它会中止连接并导致问题;您无法在连接中止时向客户端发送响应。

检查这个完美的答案,它解释了很多内容:

How to cancel HTTP upload from data events?

这是工作示例:

var express = require('express');
var app = express();
var server = require('http').createServer(app);

var multer = require('multer');


var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './temp')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
});
var upload = multer({storage: storage}).single('upload');

app.get('/', function (req, res) {

res.send(`<form action="/upload" enctype="multipart/form-data" id="upld" method="post">
<input type="text" name="title"><br>
<input type="file" name="upload" multiple="multiple"><br>
<input type="submit" value="Upload" id="upldbtn">
</form>
`
);
});


app.post('/upload', function (req, res) {
upload(req, res, function (err) {
if (err) {
res.send({'result': 0});
console.log(err);
} else {
res.send({'result': "custom result"});
console.log({'result': 1});
}
});
});

server.listen("9090", function () {
console.log('Server listening at port');
});

关于javascript - NodeJs 简单上传文件不返回正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37820465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com