Aws sdk js JS AWS S3 SDK getSignedURL不返回任何内容

Aws sdk js JS AWS S3 SDK getSignedURL不返回任何内容,aws-sdk-js,Aws Sdk Js,我是AWS SDK的新手,我正在尝试为S3中的私有对象检索预先指定的URL 我发现我的承诺是用未定义的值来解决的。我怀疑我的awsBucket变量没有利用我的awsConfig,但我不确定如何让两者进行通信 我的目标是单击一个按钮,更新我的img的src,以显示存储在S3中的图像。非常感谢您的帮助 下面是我的代码,您可以假设密钥/访问密钥填充正确 HTML: 来自S3的图像 JS: var awsAccessKeyID='我的访问密钥'; var awsSecretAccessKey=

我是AWS SDK的新手,我正在尝试为S3中的私有对象检索预先指定的URL

我发现我的承诺是用
未定义的值来解决的。我怀疑我的
awsBucket
变量没有利用我的
awsConfig
,但我不确定如何让两者进行通信

我的目标是单击一个按钮,更新我的
img
src
,以显示存储在S3中的图像。非常感谢您的帮助

下面是我的代码,您可以假设密钥/访问密钥填充正确

HTML:


来自S3的图像

JS:


var awsAccessKeyID='我的访问密钥';
var awsSecretAccessKey='my secret key';
var awsBucketName='bucket name';
常量URL\u过期时间=60;//几秒钟内
var awsRegion='eu-west-2';//这是写AWS区域的正确方法吗?
$(文档).ready(初始化());
//此函数在页面首次加载时调用
函数初始化(){
console.log('Test')
//刷新图像按钮
$(“#刷新图像按钮”)。单击(函数(){
让imagePath='1.jpg'
刷新图像(图像路径);
});
},函数(){console.log('初始化时出错:'+err.toString());});
}
//此函数使用来自数据的传入路径刷新图像
函数刷新图像(imagePath){
log(`Image path:${imagePath}`)
设preSignedURL=GENERATEPRODESIGNEDGETURL(图像路径,'jpg')
console.log(预签名)
$(“displayImage”).attr(“src”,预签名);
}
//此函数生成可以访问S3中私有对象的预签名URL
函数生成器设计日志(文件名、文件类型){
返回新承诺(功能(解决、拒绝){
设awsConfig=new AWS.Config();
awsConfig.update({
accessKeyId:awsAccessKeyID,
secretAccessKey:awsSecretAccessKey,
})
设awsBucket=new AWS.S3();
设awsBucket=new AWS.S3({
参数:{Bucket:awsBucketName},
地区:awsRegion,
})
awsBucket.getSignedUrl('getObject'{
关键字:文件名,
ContentType:fileType,
过期:URL\u过期\u时间
},(错误,url)=>{
解析(url)//此处的API响应
});
})
};

最后,我放弃了这种方法,选择了NodeJS后端。以下是我完整的工作代码:


//使用模块
const config=require('./config');
const AWS=require('AWS-sdk');
AWS.config.update({
accessKeyId:config.awsAccessKeyID
,secretAccessKey:config.awsSecretAccessKey
,region:config.awsRegion
});
const s3=新的AWS.s3({signatureVersion:'v4'});
//创建调用listObjects的参数
var bucketParams={
Bucket:'BUCKETNAME',
};
//调用S3以获取bucket中对象的列表
//这是测试身份验证是否有效的好方法
s3.列表对象(bucketParams、函数(错误、数据){
如果(错误){
日志(“错误”,err);
}否则{
console.log(“成功”,数据);
}
});
var awsGeneratePresignedURLsBackend=函数(应用程序){
//启用CORS
应用程序使用(功能(请求、恢复、下一步){
res.header(“访问控制允许原点”、“*”);
res.header(“访问控制允许头”、“来源、接受、X请求、内容类型、访问控制请求方法、访问控制请求头”);
next();
});
//连接测试
app.get('/ConnectionTest',函数(req,res){
res.send(“已连接”);
});
//松弛应用程序连接测试
app.post(“/generatePressignedgTurl”,函数(req,res){
console.log(“”)
console.log(“-----------------------------------”)
log(`endpoint:generatepresigndgetl`)
log(`type:POST`)
console.log(`statusCode:${res.statusCode}`)
const myBucket=req.body.awsBucketName
const myKey=req.body.fileName
log(`Bucket:${myBucket}`);
log(`Key:${myKey}`);
const url=s3.getSignedUrl('getObject'{
桶:我的桶,
钥匙:我的钥匙
});
res.send(url)
log(`url:${url}`)
决议结束()
});
}
module.exports=awsGeneratePresignedURLsBackend;