使用 AngularJS 在视图上显示来自 MySQL 的 LongBlob 照片

Showing LongBlob photos from MySQL on View by using AngularJS

目的:使用AngularJS和一个Servlet在我的html页面上显示不同的图像(图像会根据请求参数["id"变量])

代码解释:

问题:图像没有出现在我的视图中。

错误Chrome控制台: http://localhost:8080/MyProject/%7B%7Bimage%7D%7D 404(未找到)

Console.log(响应)结果: 对象 {data: "����..., status:200, config:Object, statusText:"OK"}

附加信息:

-

MY HTML CODE: 
... 
<img class="images" src="{{image}}"/>
...

-

MY ANGULAR JS CODE:

 ...
    $http.get('./ImagesServlet', {params: {id:13}})
    .then(function(response) {
       console.log(response)
       $scope.image = response.data;
    });
...

-

ImagesServlet CODE:
...
int id = Integer.parseInt(request.getParameter("id"));
PoiDao fetcher = new PoiDao();
try {
    List<PoiImg> image = fetcher.ImgById(id);
    response.setContentType("image/png");
    Blob img = image.get(0).getPhoto();
    InputStream in = img.getBinaryStream();
    int length = (int) img.length();
    int bufferSize = 1024;
    byte[] buffer = new byte[bufferSize];
    while ((length = in.read(buffer)) != -1) {
        response.getOutputStream().write(buffer, 0, length);
    }

} catch (ClassNotFoundException | SQLException e1) {
    e1.printStackTrace();
}
...

JavaScript

如果您不想将 $http 调用更改为直接期待 Blob

let blob = new Blob([response.data], {type: 'image/jpeg'});

否则,pass responseType: 'blob' into it 所以 response.data 将作为 Blob

开始

然后将其转换为 URL 您可以从 HTML 页面访问

let url = URL.createObjectURL(blob); // note this will prevent GC of blob

最后,如果你想干净一点,当你完成这张图片时

URL.revokeObjectURL(url); // frees blob to be GCd