显示图像时 Object.parse 位置 0 处 JSON 中的意外标记

Posted

技术标签:

【中文标题】显示图像时 Object.parse 位置 0 处 JSON 中的意外标记【英文标题】:Unexpected token in JSON at position 0 at Object.parse while displaying image 【发布时间】:2018-12-15 16:20:04 【问题描述】:

我正在尝试将图像存储在 mongodb 中并将其显示回 Angular。我已完成上传,但在尝试显示时出现错误。我在 POSTMAN 中测试了我的 API。它工作正常。我认为错误是由于响应类型。

API

    get('/images',(req, res, next) => 
      const user = AuthBase.getUser(req, res);
      this.model.findOne(\[this.userForeignKey\]: new mongoose.Types.ObjectId(user._id), (err, image) => 
          if (err) 
              res.sendStatus(400);
          
          // stream the image back by loading the file
          res.setHeader('Content-Type', 'image/jpeg'); 
          fs.createReadStream(path.join(UPLOAD_PATH, image.filename)).pipe(res);
//if I add res.json(image) here, I am not getting any error but the Image is getting broken        
 )
    );][1] 

服务

getImage(): Observable<any> 
  return this.http.get(`/api/images`);

组件

images:[]
  getImage() 
  
 this.patientService.getImage().subscribe(
    data => 
   this.images = [data]; 
   console.log(data); ,
    error => console.log(error) ); 
  

【问题讨论】:

假设您的响应是 JSON,而不是图像。这是有棱角的吗? 订阅的console.log()数据中输出什么 HttpErrorResponse headers: HttpHeaders, status: 200, statusText: "OK", url: "localhost:4200/api/images", ok: false, ... error : error: SyntaxError: Unexpected token � in JSON在 XMLHt... 的 Object.parse () 的位置 0 处,文本:“����C↵ ↵↵ ...+�9��”�q����X��?���Silֹ� k��ƶ�����؎1�m/��" 标头:HttpHeaders normalizedNames: Map(0),lazyUpdate:null,lazyInit:ƒ 消息:“解析 localhost:4200/api/images 期间的 Http 失败”名称:“HttpErrorResponse”正常:错误状态:200 statusText 首先你的 getImage() 服务有什么意义?要在模板中显示图像,您需要将图像的 url 放在 src 属性中,浏览器将加载图像。因此不需要使用 AJAX 请求加载图像。 但是您的 REST 服务不会返回带有 url 属性的 JSON 对象 (img)。它返回 JPEG 图像的字节数。您所需要的只是&lt;img src="/api/images" .../&gt;:然后浏览器将通过向 /api/images 发出请求来加载 REST 服务返回的图像字节。 【参考方案1】:

在获取请求中包含响应类型

getImage(): Observable<any> 
  return this.http.get(`/api/images`, responseType: 'blob' );

【讨论】:

Blob(23413) size: 23413, type: "image/jpeg" size:23413 type:image/jpeg" proto__:Blob 我在控制台中得到了这个。 JSON 错误中的意外令牌现在消失了。但我无法显示图像 您需要将您的 blob 转换为图像格式,勾选此项以将 blob 转换为图像***.com/questions/45530752/…

以上是关于显示图像时 Object.parse 位置 0 处 JSON 中的意外标记的主要内容,如果未能解决你的问题,请参考以下文章

Object.parse 处的 JSON 意外令牌

位置 0 处 JSON 中的意外标记 J

SyntaxError:在 Graphiql 中测试时,JSON 中位置 0 处出现意外标记 <

SyntaxError:Object.parse(本机)AngularJS中的意外标记o

数据库错误:位置 0 处没有行

问下matlab里image和imagesc有啥相同处和区别啊,使用时应该如何选择?