【发布时间】:2023-01-01 16:48:27
【问题描述】:
我正在开发 nodejs api 以将文件上传到我的 AWS s3。我关注了一些在线文章并使用了下面的代码。文件 (images/word/pdf) 成功上传到 s3。但是他们不打开。或者在本地下载打开报错。这里注意到的一件事是,通过我的网络应用程序上传的文件具有元数据内容类型:“application/octet-stream”,而手动上传到 s3 的文件具有元数据内容类型:“image/jpeg”。我错过了什么吗?这是我的 nodejs api:
app.post("/uploadfile", upload.single("file"), async (req, res) => {
try {
console.log(req.file);
var file = req.file;
const fileStream = fs.createReadStream(file.path);
const params = {
Bucket: bucketName,
Key: file.originalname,
Body: fileStream,
};
const result = await s3.upload(params).promise();
return res.status(200).send({
ok: true,
message: "File upload successful",
location: result.Location,
});
} catch (err) {
res.status(500).send({
ok: false,
message: "Failed to upload file. Error: " + err.message,
});
}
});
前端代码:
const [file, setFile] = useState();
const onSubmit = async (data) => {
console.log(data);
const fileData = new FormData();
fileData.append("upload", file);
const uploadResult = await uploadFile(fileData);
console.log(uploadResult);
}
const uploadFile = async (data) => {
const requestOptions = {
method: "POST",
body: data,
};
const endPoint = DEV_API_URL + "uploadfile";
const response = await fetch(endPoint, requestOptions);
const responseJson = await response.json();
return responseJson;
};
【问题讨论】:
-
您是否已验证上传的字节内容是否正确,只是缺少适当的内容类型标头才是问题所在?
-
看起来字节内容不正确。打开图像时出现“这不是有效的位图文件,或者当前不支持其格式”。 Word 文件给出类似的错误。和 pdf 文件变为空白。但是它们的尺寸似乎是正确的
-
验证文件内容的更好方法是下载它并与原始(正确)文件进行校验和。或者十六进制转储它并至少比较开始和结束字节。此外,确定源文件的内容类型,然后在调用上传时在 ContentType 中提供该类型。
-
它们是未打开,还是打开为空白页?
-
图片、Word 文件出错。 PDF 文件打开但没有内容。
标签: node.js reactjs amazon-web-services amazon-s3 multer