对不起,我是菜鸟,但是我正在使用mongodb针作为后端构建类星体前端。
我正在尝试使用针脚javascript sdks和AwsRequest.Builder上传图像。
Quasar给了我一个带有base64编码数据的图像对象。
我从base64字符串(标有“ data:image / jpeg; base64”的部分)中删除了标头字符串,然后将其转换为Binary并将其上传到aws s3存储桶。
我可以很好地上传数据,当我再次下载它时,我得到的是我上传的确切字节,因此从针到A3和A3的往返行程似乎可以正常工作。
仅,我上传的图像既不能在S3中打开,也不能在下载后打开。
困难似乎在于将base64字符串转换为二进制文件和/或为针脚选择合适的上载参数。
这是我的代码:
var fileSrc = file.__img.src // valid base64 encoded image with header string
var fileData = fileSrc.substr(fileSrc.indexOf(',') + 1) // stripping out header string
var body = BSON.Binary.fromBase64(fileData, 0) // here I get the BSON error
const args = {
ACL: 'public-read',
Bucket: 'elever-erp-document-store',
ContentType: file.type,
ContentEncoding: 'x-www-form-urlencoded', // not sure about the need to specify encoding for binary file
Key: file.name,
Body: body
}
const request = new AwsRequest.Builder()
.withService('s3')
.withRegion('eu-west-1')
.withAction('PutObject')
.withArgs(args)
aws.execute(request.build())
.then(result => {
alert('OK ' + result)
return file
}).catch(err => {
alert('error ' + err)
})
在上面的代码段中,按照下面的Haley的建议,我尝试使用BSON.Binary.fromBase64转换为二进制,但出现以下错误:
boot_stitch__WEBPACK_IMPORTED_MODULE_3__["BSON"].Binary.fromBase64 is not a function.
我还尝试了其他方法将base64字符串转换为二进制,例如vanilla atob()函数和BUFFER npm模块,但没有任何乐趣。
我必须在某个地方做一些愚蠢的事情,但我找不到出路。
答案 0 :(得分:1)
我遇到了类似的问题,通过从base64数据创建缓冲区来解决此问题,然后使用new BSON.Binary(new Uint8Array(fileBuffer), 0)
创建了BSON二进制对象。
使用OP看起来像这样:
var fileSrc = file.__img.src // valid base64 encoded image with header string
var fileData = fileSrc.substr(fileSrc.indexOf(',') + 1) // stripping out header string
var fileBuffer = new Buffer(fileData, 'base64');
var body = new BSON.Binary(new Uint8Array(fileBuffer), 0)
答案 1 :(得分:0)
您应该能够将base64图像转换为BSON.Binary,然后以这种方式上传实际图像(我有一些硬编码的值,但是您可以替换那些值):
context.services.get("<aws-svc-name>").s3("<your-region>").PutObject({
Bucket: 'myBucket',
Key: "hello.png",
ContentType: "image/png",
Body: BSON.Binary.fromBase64("iVBORw0KGgoAA... (rest of the base64 string)", 0),
})