node.js - AWS S3上传0 B文件-node.js
问题描述
我正在尝试使用将文件上传到 AWS S3,[putObject][1]
但它会生成 0 字节大小的文件。
我确实从 putObject 调用中得到了成功的响应。
Node.js 代码:
const aws = require("aws-sdk");
const s3 = new aws.S3();
module.exports = {
upload: function(req, res, next) {
console.log("Going to upload");
console.log(req.files);
let uploadFile = req.files.file;
const s3PutParams = {
Bucket: process.env.S3_BUCKET_NAME,
Key: uploadFile.name,
Body: uploadFile.data,
ACL: "public-read"
};
const s3GetParams = {
Bucket: process.env.S3_BUCKET_NAME,
Key: uploadFile.name
};
console.log(s3PutParams);
s3.putObject(s3PutParams, function(err, response) {
if (err) {
console.error(err);
} else {
console.log("Response is", response);
var url = s3.getSignedUrl("getObject", s3GetParams);
console.log("The URL is", url);
res.json({
returnedUrl: url,
publicUrl: `https://${process.env.S3_BUCKET_NAME}.s3.amazonaws.com/${uploadFile.name}`
});
}
});
}
};
谁能帮我找出问题所在?
11/20 编辑:
@EmmanuelNK 帮助发现了 0 的事实。Buffer.byteLength(req.files.file.data)
他有以下问题:
您是要尝试将整个缓冲区写入内存还是要将其流式传输到 s3?
对不起,如果答案不是重点,仍然让我的脚湿透。基本上我想将图像上传到 S3,然后使用该 URL 在网页上显示它。换句话说,就像一个照片桶
您如何使用上传
现在我只是使用邮递员测试我的后端代码(发布在问题中)。一旦我开始这样做,前端就会有一个文件上传表单调用这个路由。
这有帮助吗?在此先感谢您的帮助。
解决方案
如果您使用express-fileupload作为文件上传中间件,并且您已将该useTempFiles
选项设置为 true,请记住您的数据文件缓冲区将为空(检查使用情况),这与您面临的问题相关。要解决这个问题,只需阅读温度。再次文件以获取预期的文件缓冲区。
import fs from 'fs';
// OR
const fs = require('fs');
// in your route
let uploadFile = req.files.file;
// THIS
fs.readFile(uploadedFile.tempFilePath, (err, uploadedData) => {
if (err) { throw err; }
const s3PutParams = {
Bucket: process.env.S3_BUCKET_NAME,
Key: uploadFile.name,
Body: uploadData, // <--- THIS
ACL: "public-read"
};
const s3GetParams = {
Bucket: process.env.S3_BUCKET_NAME,
Key: uploadFile.name
};
console.log(s3PutParams);
s3.putObject(s3PutParams, function(err, response) {
if (err) {
console.error(err);
throw err;
} else {
console.log("Response is", response);
var url = s3.getSignedUrl("getObject", s3GetParams);
console.log("The URL is", url);
res.json({
returnedUrl: url,
publicUrl: `https://${process.env.S3_BUCKET_NAME}.s3.amazonaws.com/${uploadFile.name}`
});
}
});
});
推荐阅读
- html - 如何组织卡片组
- python - 从记录列表中过滤单元:BS4 Python
- docker - Docker .exe 甚至不会在 w10 企业版上启动
- javascript - 在应用程序外部调用路由更改(react-router)
- asp.net - 如何访问在 localhost (IIS) 上运行的 ASP.NET Web api
- redux - 如何检查用户是否登录过一次?
- regex - python正则表达式从字符串中删除特定的sub_string
- javascript - 将 Vue.js appstate 保存到本地存储的最佳事件
- windows - 在 Windows 2012 R2 Server 的 Hyper-V 上运行 Ubuntu 18.04 时出现黑色矩形并部分混淆桌面
- karate - 空手道 API 测试 - API 响应数组上的数值验证