Javascript 通过NodeJs将图像从浏览器上传到S3 bucket

Javascript 通过NodeJs将图像从浏览器上传到S3 bucket,javascript,node.js,amazon-s3,aws-sdk,Javascript,Node.js,Amazon S3,Aws Sdk,我正在尝试将图像从浏览器上传到AmazonS3,下面的代码会向AmazonS3发送一些blob,很好,我无法在浏览器中读取生成的文件。它似乎不知道这是一个图像文件 我通过浏览器将其发送到NodeJS: let myReader=new FileReader(); myReader.onloadend=(e)=>{ app.ws.send(myReader.result); } myReader.readAsDataURL(e.target.files[0]); 在NodeJS中,我将

我正在尝试将图像从浏览器上传到AmazonS3,下面的代码会向AmazonS3发送一些blob,很好,我无法在浏览器中读取生成的文件。它似乎不知道这是一个图像文件

我通过浏览器将其发送到NodeJS:

let myReader=new FileReader();
myReader.onloadend=(e)=>{ app.ws.send(myReader.result); }
myReader.readAsDataURL(e.target.files[0]);  
在NodeJS中,我将其发送到S3:

const s3=new AWS.S3();
const params= { Bucket:<bucketName>, Key:fileName, Body:imgData, ACL:"public-read", ContentEncoding:'base64' };
s3.putObject(params, (err, data)=>{
    if (err) throw err; 
});
const s3=new AWS.s3();
const params={Bucket:,Key:fileName,Body:imgData,ACL:“public read”,ContentEncoding:'base64'};
s3.putObject(参数,(错误,数据)=>{
如果(错误)抛出错误;
});
查看AWS S3指南, 此文档包含将图像从浏览器上载到S3 bucket所需的逻辑


您需要修改传入的base64图像数据,并显式设置ContentType:

const s3=new AWS.S3();
const type = imgData.split(';')[0].split('/')[1];
imgData= new Buffer.from(imgData.replace(/^data:image\/\w+;base64,/, ""), 'base64');
let params = { Bucket:<bucketName>, Key:fileName, Body:imgData, 
    ACL:"public-read", ContentType:"image."+type, ContentEncoding: 'base64' };

s3.upload(params, (err, data)=>{
    if (err) throw err;
    ... Do something ... 
    });
const s3=new AWS.s3();
常量类型=imgData.split(“;”)[0]。split(“/”)[1];
imgData=new Buffer.from(imgData.replace(/^data:image\/\w+;base64,/,“”),“base64”);
设params={Bucket:,Key:fileName,Body:imgData,
ACL:“公共读取”,ContentType:“图像”。+type,ContentEncoding:'base64'};
s3.上传(参数,(错误,数据)=>{
如果(错误)抛出错误;
…做点什么。。。
});

问题到底是什么?图像似乎以某种形式存在,但当我在AWS中单击链接时,如果使用其控制台上载,它将下载而不是显示类似的图像。当我点击桌面上的图像时,它显示为desn;我不支持这个文件。这里有一个链接:我一直在看它,但我在这里使用的是putObject,而不是托管上传。这些文件没有帮助