2016-08-01 3 views
0

AWSラムダを使用して画像のサイズを変更しています。この403(禁止された)エラーをキャッチしてUIを再度レンダリングするにはどうすればよいですか?

ほとんどの場合、サイズ変更されたイメージを使用しようとすると、サイズ変更プロセスが実行されます。ただし、AWS Lambdaがサイズ変更プロセスを完了していないことがあります。これは、イメージが使用できる状態になっていないことを意味します。

enter image description here

をそして、私のコンソールが表示されます::

だから私は

<img [src]="imgUrl"> 

を使用する場合には、表示されます

がGET https://foo.com/bar.jpg 403(禁止)

このエラーをキャッチして、UI /画像の一部を再度レンダリングする方法はありますか?おかげ

答えて

2

SRCリンクが壊れたときに、いくつかの他の画像を表示することができ、

<img class="thumbnail-image" [src]="imgUrl" 
onError="this.src='./Imagefolder/placeholder.jpg';" alt="..." /> 

更新

何とか(あなたのコメントによると)onErrorが変数で動作していないことがわかりました。私は

import {Component, Directive, Output, EventEmitter, Input, SimpleChange} from 'angular2/core' 

@Directive({ 
    selector: 'img[src]', 
    host: { 
    '(error)':'SetDefaultUrl()', 
    '[src]':'src' 
    } 
}) 
class DefaultImage { 
    @Input() src:string; 
    SetDefaultUrl() { 
    this.src = 'images/angular.png'; // your default img path 
    } 
} 

@Component({ 
    selector: 'my-app', 
    directives:[DefaultImage], 
    template: ` 
    <img [src]="invalidPath"/> 
    ` 
}) 
export class App { 
    invalidPath="abc"; 
} 

DEMO、以下に示すように、同じエラーが小さいので、カスタムディレクティブを思い付いたに直面していました:https://plnkr.co/edit/fD8zxd?p=previewこのエラーは、ブラウザによって生成し、それを防ぐためにあなたができることは何もありません

+0

これはクールに見える!実際には、イメージ配列 'imgUrls []'を '* ngFor'で使用していますので、2番目の方法を選択する必要があります。デモのような静的リンクを使用して成功しますが、変数を使用してリンクを与える方法はありますか? onError = "ThisError =" ThisError = "ThisError =" ThisError = "this.src = this.newUrl"、 'onError =" this.src = {{newUrl}} "'どちらも動作しません –

+0

できますか?プランカで再現しますか?それは動作するはずです。 – micronyks

0

私はこの作業を取得するために見る唯一の方法は、JavaScriptのである:

var img = new Image(); 
img.src = "imgUrl"; 

img.onload = function() { 
    console.log("image was loaded successfully"); 
} 

img.onerror = function() { 
    console.log("there was an error loading the image"); 
} 
0

ただし、無効なURLを渡すことはありません。

サーバーは、無効なURLを要求した場合にサーバーからHTTPエラーコードを返さずに、AJAX呼び出しを使用して既存のURLを確認できるAPIをサポートする必要があります。

関連する問題