Javascript 显示从s3获取的图像
我想从s3获取图像,并将它们显示在我的HTML页面上 角度HTML文件:Javascript 显示从s3获取的图像,javascript,angularjs,amazon-s3,filereader,aws-sdk,Javascript,Angularjs,Amazon S3,Filereader,Aws Sdk,我想从s3获取图像,并将它们显示在我的HTML页面上 角度HTML文件: <section data-ng-controller="myCtrl"> <img ng-src="{{src}}" width="200px" height="200px"> </section> 我找到了一个名为文件阅读器的东西,并尝试了这个: var reader = new FileReader(); reader.onload = function(event) {
<section data-ng-controller="myCtrl">
<img ng-src="{{src}}" width="200px" height="200px">
</section>
我找到了一个名为文件阅读器的东西,并尝试了这个:
var reader = new FileReader();
reader.onload = function(event) {
$scope.src = event.target.result;
}
reader.readAsDataURL(file);
但它显示错误:未捕获类型错误:未能在“FileReader”上执行“readAsDataURL”:参数1不是“Blob”类型。
请帮助我在img标签中显示图像文件的代码
我的S3存储桶不公开 编辑:
我对s3不感兴趣。我想知道的是
如何使用HTML图像标记以文件对象(s3 obj)的形式显示javascript代码中的图像如果您的s3文件是公共的(您必须更改它,默认情况下它不是公共的),您可以从该模式获取url:
https://s3-<region>.amazonaws.com/<bucket-name>/<key>
您不会“获取”要显示的图像。您只需将图像URL指向存储它们的位置(在您的示例中是S3)。因此,不要拉取单个对象,而是拉取该bucket中的文件列表(bucket.listObjects
),然后将它们添加到缩略图/图像的源中。
从S3获得的数据是字节数组。您需要将其转换为Base64编码的数据URI。encode函数借用自。下面是一个删除凭据的操作。您只需提及存储在s3中的图像的url即可
https://mybucket.s3.amazonaws.com/myimage.jpg
这应该是可行的。通过promise从s3获取图像的完整实现-享受
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.179.0.min.js"></script>
</head>
<body>
<img height="200" width="200">
<script>
var mimes = {
'jpeg': 'data:image/jpeg;base64,'
};
AWS.config.update({
signatureVersion: 'v4',
region: 'us-east-1',
accessKeyId: '',
secretAccessKey: ''
});
var bucket = new AWS.S3({params: {Bucket: 'xxx'}});
function encode(data)
{
var str = data.reduce(function(a,b){ return a+String.fromCharCode(b) },'');
return btoa(str).replace(/.{76}(?=.)/g,'$&\n');
}
function getUrlByFileName(fileName,mimeType) {
return new Promise(
function (resolve, reject) {
bucket.getObject({Key: fileName}, function (err, file) {
var result = mimeType + encode(file.Body);
resolve(result)
});
}
);
}
function openInNewTab(url) {
var redirectWindow = window.open(url, '_blank');
redirectWindow.location;
}
getUrlByFileName('sprites.png', mimes.jpeg).then(function(data) {
//openInNewTab(data);
document.querySelector('img').src = data;
});
</script>
</body>
</html>
my bucket不能公开…你知道吗?所以你应该使用浏览器的JavaScript SDK。我可以问一下为什么你的bucket不能公开读取吗?如果您不这样做,您需要通过一个键访问bucket,如果您将一个键放入代码中,那么您的bucket基本上是非常公开的。@enpenax实际上我的问题是如何使用html图像标记以文件对象的形式显示javascript代码中的图像它现在工作了吗?我有一些问题实际上,我的问题是如何使用img标记以文件对象的形式显示javascript代码中的图像。我已经更新了答案以满足您的要求。您在chrome中是否遇到资源不足的问题?我正在预加载一堆图像,但我看不出这是可行的。这非常有效!超时对于触发摘要非常重要。>由于明显的原因,如果没有公共读取权限,将无法访问这些摘要。是的,但你可以通过cognito或其他凭证访问它。在这种情况下,仅使用URL是不起作用的,除非您使用某个sortHi@Liad Livnat的预签名URL……如果可能的话,请您帮助在angular 6中完成上述代码……thanx。。。。
<section data-ng-controller="myCtrl">
<img ng-src="{{s3Url}}{{image.Key}}" width="200px" height="200px" ng-repeat="image in allImageData">
</section>
function myCtrl($scope, $timeout) {
AWS.config.update({
accessKeyId: 'YOUR_ACCESS_TOKEN', secretAccessKey: 'YOUR_SECRET'});
AWS.config.region = "YOUR_REGION";
var bucket = new AWS.S3({params: {Bucket: 'YOUR_BUCKET'}});
bucket.getObject({Key: 'happy-face.jpg'},function(err,file){
$timeout(function(){
$scope.s3url = "data:image/jpeg;base64," + encode(file.Body);
},1);
});
}
function encode(data)
{
var str = data.reduce(function(a,b){ return a+String.fromCharCode(b) },'');
return btoa(str).replace(/.{76}(?=.)/g,'$&\n');
}
https://mybucket.s3.amazonaws.com/myimage.jpg
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.179.0.min.js"></script>
</head>
<body>
<img height="200" width="200">
<script>
var mimes = {
'jpeg': 'data:image/jpeg;base64,'
};
AWS.config.update({
signatureVersion: 'v4',
region: 'us-east-1',
accessKeyId: '',
secretAccessKey: ''
});
var bucket = new AWS.S3({params: {Bucket: 'xxx'}});
function encode(data)
{
var str = data.reduce(function(a,b){ return a+String.fromCharCode(b) },'');
return btoa(str).replace(/.{76}(?=.)/g,'$&\n');
}
function getUrlByFileName(fileName,mimeType) {
return new Promise(
function (resolve, reject) {
bucket.getObject({Key: fileName}, function (err, file) {
var result = mimeType + encode(file.Body);
resolve(result)
});
}
);
}
function openInNewTab(url) {
var redirectWindow = window.open(url, '_blank');
redirectWindow.location;
}
getUrlByFileName('sprites.png', mimes.jpeg).then(function(data) {
//openInNewTab(data);
document.querySelector('img').src = data;
});
</script>
</body>
</html>