在涉及文件管理以及NodeJS内部的概念时,我遇到了一些关于概念的问题,并且想知道是否有人能指出我正确的方向。
我有一个上传队列列表,可以根据用户需要同时进行(允许他们随意暂停或删除下载),我需要进程点击节点服务器来调整图像大小或根据需要操作视频。从这里开始,我需要Node通过S3上传视频或图像,使用AWS-SDK(我设置了一个用于一般沙箱测试的fakeS3服务器),当我上传时,我需要在浏览器中跟踪上传的进度。 / p>
我正在使用React和服务器端渲染与Node,所以我认为必须有一种非常直接的方式来处理这种情况,但我找不到以前做过这个的人。以下是我正在搞砸的几个概念:
Server.js(核心输入)
server.use(express.static(path.join(__dirname, 'public')));
server.use(multer({
dest: './public/temp',
limits: {
fieldNameSize: 50,
files: 1,
fields: 5,
fileSize: 1024 * 1024
},
rename: (fieldname, filename) => {
return filename;
},
onFileUploadStart: (file) => {
console.log('Starting file upload process.');
},
inMemory: true
}));
server.use(cookieParser());
server.use(bodyParser.urlencoded({ extended: true }));
server.use(bodyParser.json());
中间路线(/上传或其他)
export function uploadContent(req, res) {
const config = {
s3ForcePathStyle: true,
accessKeyId: 'ACCESS_KEY_ID',
secretAccessKey: 'SECRET_ACCESS_KEY',
endpoint: new AWS.Endpoint('http://localhost:4567'), // TODO make live
};
const client = new AWS.S3(config);
const params = {
Key: 'Key',
Bucket: 'Bucket',
Body: fs.createReadStream(req.body.files[0])
};
client.upload(params, function uploadCallback (err, data) {
console.log(err, data);
});
}
这不起作用,因为身体解析器与路线冲突,multer也有时间(我对其他建议开放)任何关于如何实现这一点的信息都会很棒。我不是在寻找完整的代码只是为了让我走上正确的道路。我感谢任何帮助!
答案 0 :(得分:0)
您可以在浏览器和Nodejs Route之间使用套接字chanel,并使用httpUploadProgress事件发出事件开始,结束和进度:
var s3obj = new AWS.S3({params: {Bucket: 'myBucket', Key: 'myKey'}});
s3obj.upload({Body: body}).
on('httpUploadProgress', function(evt) {
console.log(evt);
//Emit Here your events
}).
send(function(err, data) { console.log(err, data) });