node.js - 按 MEAN 中的 ID 显示图像

标签 node.js angular mongodb express mean

我正在尝试将图像存储在 mongoDB 中并将其检索回以从 Angular 端显示。

profile.html

<input class="file-hide" type="file" (change)="fileChangeEvent($event)" 
 placeholder="Upload file..." />
 <button type="button" (click)="upload()">Upload</button> 

profile.component.ts

images=[];
    fileChangeEvent(event) {
        this.profileService.uploadAvatar(event); 
       }

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

profile.service.ts

    uploadAvatar(event){
    let fileList: FileList = event.target.files;
    if(fileList.length > 0) {
     let file: File = fileList[0];
     let formData:FormData = new FormData();
     formData.append('avatar', file, file.name);
     let headers = new Headers();
     /** No need to include Content-Type in Angular 4 */
     // headers.append('Content-Type', 'multipart/form-data');
     // headers.append('Accept', 'application/json');

      this.http.post('/api/images', formData)
         .subscribe(
             data => console.log('success'),
             error => console.log(error)
         )
   }

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

服务器端

  app.post(/images,(req, res, next) => {
  upload(req, res, function(err) {
  // Create a new image model and fill the properties
  let newImage = new Image();
  newImage.filename = req.file.filename;
  newImage.originalName = req.file.originalname;
  newImage.desc = req.body.desc
  newImage.save(err => {
      if (err) {
          return res.sendStatus(400);
      }
      res.status(201).send({ newImage });
      console.log("uploaded")
  });
})
});

app.get(/images,  (req, res, next) => {
  console.log("Get Image By Id")
  let imgId = req.params.id;

  Image.findById(imgId, (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);

  })
});

型号

export interface IImageModel extends mongoose.Document {
    filename: string; 
    originalName: string; 
    desc: string;
    created: Date;
    url : String
  };

  // Actual DB model
export var imageSchema = new mongoose.Schema({
    filename: String,
    originalName: String,
    desc: String,
    url : String,
    created: { type: Date, default: Date.now }
});
 export const Image = mongoose.model<IImageModel>('Image', imageSchema);

现在我可以从前端上传文件并将其存储在数据库中。我可以使用 postman 通过 ID 查看图像。但我想从前端显示图像。我对此感到震惊。任何人都可以帮我显示存储在 mongoDB 中的图像。 can view image using postman

最佳答案

这是错误的屏幕截图error message

关于node.js - 按 MEAN 中的 ID 显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51209628/

相关文章:

node.js - 未从 csslintrc 文件中获取 Mimosa csslint 配置

javascript - 哪种方式更方便在无限循环中执行异步函数,并在每次执行之间进行 sleep (Node.js/Vanilla JS)

javascript - pdf文件无法在浏览器中打开

javascript - Angular 2 - API 请求未返回 Observable,错误 : undefined has no property 'length'

angular - 需要将 graphql 登录逻辑与我的 Angular 组件分开,以使其更通用

javascript - 使用 mongoose 返回特定字段

MongoDb 数据库与集合

node.js - nodejs express 3.0 app.use 是否被调用

Angular 2 : Better/Deeper Zone Stacks for Debugging

javascript - mongoose save 不是使用模式的函数