私はSpringBootとAngular2を使用してクライアントサーバーアプリケーションを持っています。 サーバーからファイル名でイメージをロードしたいとします。これは正常に動作します。Spring RestControllerから角度を取得してキャッシュする
クライアントにはの画像:文字列が保存されていますが、テンプレートに再度配置します。 あなたはに注意を払うかもしれませんreturn res.url;;私は間違っているかもしれない実際のリソースを使用しません。
私の目的は、イメージがキャッシュされることです。私の理解では、Webブラウザは画像を自動的にキャッシュすることができます。正しい? しかし、キャッシングはまだ機能しませんし、誰かが調整する必要があるヒントを教えてくれますか? 別のヘッダーが必要ですか?
サーバー(SpringBoot)
public class ImageRestController {
@RequestMapping(value = "/getImage/{filename:.+}", method = RequestMethod.GET)
public ResponseEntity<Resource> getImage(@PathVariable String filename) {
try {
String path = Paths.get(ROOT, filename).toString();
Resource loader = resourceLoader.getResource("file:" + path);
return new ResponseEntity<Resource>(loader, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<Resource>(HttpStatus.NOT_FOUND);
}
}
}
クライアント(Angular2)
@Component({
selector: 'my-image',
template: `
<img src="{{image}}"/>
`
})
export class MyComponent {
image:string;
constructor(private service:MyService) {}
showImage(filename:string) {
this.service.getImage(filename)
.subscribe((file) => {
this.image = file;
});
}
}
export class MyService() {
getImage(filename:String):Observable<any> {
return this.http.get(imagesUrl + "getImage/" + filename)
.map(this.extractUrl)
.catch(this.handleError);
}
extractUrl(res:Response):string {
return res.url;
}
}
すでにHttpStatus.NOT_MODIFIEDを一度サービスしたクライアントに送信してみることができます。 – rinukkusu