当前位置: 首页 > 面试题库 >

显示从s3获取的图像

微生学
2023-03-14
问题内容

我想从s3获取图像并将其显示在HTML页面上。

Angular HTML文件:

<section data-ng-controller="myCtrl">
    <img ng-src="{{src}}" width="200px" height="200px">
</section>

Angular Controller文件:

angular.module('users').controller('myCtrl', ['$scope',function($scope) {
    var s3 = new AWS.S3(); 
    s3.getObject({Bucket: 'mybucket', Key: 'myimage.jpg'},function(err,file){

    //code?? to display this image file in the img tag
    //$scope.src=file????....obviously it wont work

    });
}]);

我找到了一个叫做 FileReader的 东西并尝试了这个:

var reader = new FileReader();
reader.onload = function(event) {
    $scope.src = event.target.result;
}
reader.readAsDataURL(file);

但是它显示错误:
Uncaught TypeError:无法在’FileReader’上执行’readAsDataURL’:参数1的类型不是’Blob’。

请使用代码帮助我在img标签中显示图像文件
我的S3存储桶不是公开的

编辑:
我对s3不感兴趣。我想知道的是
如何使用HTML image标记以文件对象(s3 obj)的形式显示javascript代码中的图像


问题答案:

您无需“获取”要显示的图像。您只需将图像URL指向它们的存储位置即可(在您的情况下为S3)。因此,不要拉单个对象,而是拉该存储桶(bucket.listObjects)中的文件列表,然后将它们添加到缩略图/图像的源中。

<section data-ng-controller="myCtrl">
    <img ng-src="{{s3Url}}{{image.Key}}" width="200px" height="200px" ng-repeat="image in allImageData">
</section>



$scope.s3Url = 'https://s3-<region>.amazonaws.com/myBucket/';
var bucket = new AWS.S3({params: {Bucket: 'myBucket'}});
  bucket.listObjects(function (err, data) {
    if (err) {
      console.log(err);
    } else {
      console.log(data);
      $scope.allImageData = data.Contents;
    }
  });

假设文件具有读取权限。由于明显的原因,未经公众阅读许可,将无法访问它们。

编辑: 基于评论,问题是试图在页面上加载实际图像。方法如下:

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');
}

从S3获得的数据是字节数组。您需要将其转换为base64编码的数据URI。编码功能是从这里借来的。这是一个删除了凭据的有效jsFiddle。



 类似资料:
  • 但是宽度和高度较低的图像成功地加载到图像视图中! 有人能告诉我代码有什么问题吗?我做错了什么?我只想从库中导入相机图像,并在图像视图中显示它们!

  • 问题内容: 我已经创建了一个表,其中已通过“ BLOB”保存了图像。我需要将这些图像与其他项目一起显示。但是我不知道如何在同一页面中一起显示这些图像。这是我的php代码,以表格形式显示其他内容。同样,我想相应地显示图像。有什么帮助吗? 问题答案: 正如其他人所提到的,将图像存储在数据库中通常不是一个好主意。 图像不会与另一个页面数据以相同的响应传输。 要显示数据库中的图像,您需要实现一个脚本,给定

  • 我正在尝试在一个自定义主题中实现wooCommerce,我正在基于bootstrap框架构建该主题(因为我对事物的外观很挑剔),所以我正在尝试重新定位wooCommerce产品缩略图库图像。我知道wooCommerce中提供的各种函数和钩子,如wc-template-hooks.php中列出的函数和钩子,它们工作得非常好,但在我的特殊情况下除外。我使用和钩子将产品信息包装在我的引导框架中,就像这样

  • 所以我猜没有注册的ImageReader?我怎么能通过Jaspersoft Studio修复这样的东西? 编辑:我尝试使用java.io.InputStream作为这里建议的类类型,但结果是相同的错误。算是吧。一个很大的区别是,在Jaspersoft Studio中,如果出现错误,您可以将图像设置为显示为空白。如果我使用java.awt.Image,那么这个设置什么也不做。我仍然得到一个错误,报告

  • 问题内容: 该代码非常简单,我不知道为什么它无法工作。 这是指向JSON文件http://webapp.armadealo.com/home.json的链接 这是使用getJSON的代码 我只希望代码显示整个JSON内容。 问题答案: 经过几个月的搜索,我找到了解决方案。因此,我在回答自己的问题。 当不支持JSON时,当我们坚持相同的原产地政策时,我们必须使用填充将JSON换行并使其成为JSONP