Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将带有PUT和表单数据的文件上载到S3_Javascript_Amazon S3_Aws Sdk Js - Fatal编程技术网

Javascript 将带有PUT和表单数据的文件上载到S3

Javascript 将带有PUT和表单数据的文件上载到S3,javascript,amazon-s3,aws-sdk-js,Javascript,Amazon S3,Aws Sdk Js,我试图通过PUT接口将一个图像文件(jpeg)上传到AWS S3,我得到了错误SignatureDesNotMatch 在我的服务器上,我有一个带有端点的Express node.js应用程序,用于创建签名url “严格使用”; const express=require('express'); const bodyParser=require('body-parser'); const config=require('./config'); //加载Node.js的AWS SDK const

我试图通过PUT接口将一个图像文件(jpeg)上传到AWS S3,我得到了错误SignatureDesNotMatch

在我的服务器上,我有一个带有端点的Express node.js应用程序,用于创建签名url

“严格使用”;
const express=require('express');
const bodyParser=require('body-parser');
const config=require('./config');
//加载Node.js的AWS SDK
const AWS=require('AWS-sdk');
AWS.config.update({
accessKeyId:config.AWS\u ACCESS\u KEY\u ID,
secretAccessKey:config.AWS\u SECRET\u ACCESS\u KEY,
地区:'us-east-1'
});
const s3=新的AWS.s3();
常量app=express();
const awsS3Router=express.Router();
//解析应用程序/json
use(bodyParser.urlencoded({extended:false}));
use(bodyParser.json());
//AWS S3 REST端点
awsS3Router.get('/getImageDrop',函数(req,res){
如果(!req.query.filename){
res.status(400).send('请求查询为空!');
}
常量s3Params={
Bucket:config.S3_Bucket,
ContentType:“图像/jpeg”,
ACL:“公共读取”,
键:req.query.filename,
有效期:6000
};
s3.getSignedUrl('putObject',s3参数,函数(err,data){
如果(错误){
console.error('error:'+err);
返回res.end();
}
常量返回数据={
signedRequest:数据,
url:'https://'+config.S3_BUCKET+'.S3.amazonaws.com/'+req.query.filename
};
app.locals.s3SignedUrl=returnData.signedRequest;
res.write(JSON.stringify(returnData));
res.end();
});
});
应用程序使用('/aws/s3',awsS3Router);

module.exports=app
不能将
PUT
与表单结构一起使用
PUT
需要原始二进制体。谢谢,所以我决定发一篇文章,通过表单数据上传文件。我使用s3.createPresignedPost()生成了一个预签名url,可以在表单数据的POST调用中使用。我现在收到一个新错误:AccessDenied根据策略无效:策略条件失败:[“eq\”,“$Content Type\”,“image/jpeg\”]。如果有人对如何解决上述错误有指示。非常感谢您的帮助。错误表明,您的策略要求表单包含名为
内容类型
的字段,该字段的值为
图像/jpeg
,但该字段丢失或没有该值。我相信我在createPresignedPost中正确传递了内容类型。还是应该去别的地方?const s3Params={……条件:[……{'Content-Type':'image/jpeg'}]};s3.createPresignedPost(s3Params,函数(err,data){…});通过将代码还原为使用PUT预签名的S3URL并通过XmlHttpRequest上传,我解决了上传图像文件的问题。