amazon-s3 - 我在 s3 上上传图像后,图像已上传但损坏,我做错了什么?
问题描述
我创建了一个 api 来将图像上传到我的 s3 存储桶,但目前我上传到 s3 的图像似乎不可读,所以我猜它们已损坏?
下面是我的代码:
const AWS = require('aws-sdk')
const s3= new AWS.S3()
const crypto = require("crypto")
const sha1 = data => {
return crypto.createHash("sha1").update(data).digest("hex")
}
const getFile = (ext, buffer, type) => {
let encryptedFileName = sha1(new Buffer(new Date().toString()))
//let timeBasedFileName = new Date().valueOf()
let fileName = encryptedFileName+'.'+ext
let bucketPath = "bucketname/folder/"+type //eg: bucket1/animals/fish
let fileFullPath = bucketPath+"/"+fileName //eg: bucket1/animals/fish/salmon.jpg
let params = {
Bucket: 'mybucket',
Body: buffer,
ContentType: ext==='jpg'||ext==='jpeg'?'image/jpeg':'image/'+ext,
Key: fileName
}
let uploadFile = {
size: buffer.toString('ascii').length,
type: ext==='jpg'||ext==='jpeg'?'image/jpeg':'image/'+ext,
name: fileName,
full_path: fileFullPath
}
return {params,uploadFile}
}
exports.handler = (event, context, callback) => {
let base64String = event.base64String
let ext = base64String.substring("data:image/".length, base64String.indexOf(";base64"))
if (ext===null || (ext!=='jpg' && ext!=='jpeg' && ext!=='gif' && ext!=='png')) {return context.fail('Base64 string is not a supported file type.')}
//pass base64 string into buffer
let buffer = new Buffer(base64String, 'base64')
let file = getFile(ext, buffer, event.type)
//callback(null, 'working fine')
let params = file.params
s3.putObject(params, function(err,data) {
// example response: {"filename":"0242CCB0-CE2E-4C75-A02E-FC054DA9E743.png","status":1,"message":"save success"}
let response = {"statusCode": 400, "filename": "", status: 0, message: "save fail"}
if (err) {callback(err, null)}
response.statusCode=200
response.filename=file.uploadFile.name
response.status=1
response.message="save success"
callback(null, response)
})
}
我基本上是将base64图像字符串转换为缓冲区并上传它。我在这里做错了什么?
解决方案
推荐阅读
- qt - qml 中的 TextField 内的矩形中不能有多个 InnerShadow
- javascript - 为什么这个图像的 React 迭代不起作用?
- reactjs - React:为什么用户刷新页面后才能退出?
- express - express firebase 服务 POST/GET 请求以 404 错误响应
- android - 在移动设备上从我的前端本地向后端发出请求的问题
- amazon-sagemaker - describe_feature_group() 字典中缺少“ResolvedOutputS3Uri”键
- database - 在多步入职中保留数据的最佳方法是什么?
- python - python-django 无法创建目录和文件
- python - python udp没有收到所有数据包
- flink-sql - Flink-SQL 和读取 parquet 文件会给出奇怪的错误