【问题标题】:Display image on Angular 10, where image is uploaded using Multer on Node.js server在 Angular 10 上显示图像,其中图像是在 Node.js 服务器上使用 Multer 上传的
【发布时间】:2021-07-22 05:21:11
【问题描述】:

我正在为我的 Web 应用程序使用 MEAN 堆栈。我正在使用 Multer 将图像存储在 Node.js 服务器上的 artImages 文件夹中。这是使用 Multer 上传图片并将图片路径与其他数据一起存储在 MongoDB 中的 post 请求。

const storage = multer.diskStorage({
    destination: (req, file, callBack) => {
        callBack(null, 'artImages/paintings')
    },
    filename: (req, file, callBack) => {
        callBack(null, `painting&${Date.now()}&${file.originalname}`)
    }
})

var upload = multer({ storage: storage })

router.post('/', upload.array('artFileLocations'), function(req, res) {
    var paintingFileDesitnations;
    const files = req.files
    if(!files) {
        res.sendStatus(500)
    } else {
        (new Paintings({ 'paintingName': req.body.artName, 'paintingFileLocations': req.files })).save()
        .then((info) => res.send(info))
        .catch((error) => console.log(error));
    }
});

现在我正在向 MongoDB 发出获取请求,该请求提供数据和文件路径。现在我想将存储在服务器上的数据以及它们各自的图像发送回 Angular。我也写了这个:

router.get('/', function(req, res) {
    Paintings.find({})
        .then(paintings => { 
             imagePath = path.resolve(<path>, paintings[0].paintingFileLocations[0].path)
             fs.readFile(imagePath, 'utf8', function (err, data) {
               if (err) {
                   console.log(err);
               }
               console.log('Data: ', data);
               res.send(data);
            });
        })
        .catch(error => console.log(error))
});

在这里,请求永远不会控制台错误,我做了控制台数据,这显然是很多乱码。

在 Angular 客户端上,这是状态为 200 但响应为 HttpErrorResponse 的响应。我不明白发生了什么。

HttpErrorResponse {headers: HttpHeaders, status: 200, statusText: "OK", url: "http://localhost:8080/api/paintings/getAll", ok: false, …}
  error: {error: SyntaxError: Unexpected token � in JSON at position 0 at JSON.parse (<anonymous>) at XMLHtt…, text: "�PNG
↵↵
  IHDR??���7sRGB���8…�$�I'O$vr�:�b�*FR�B@!0(�b&�x'6��IEND�B`�"}
  headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ}
  message: "Http failure during parsing for http://localhost:8080/api/paintings/getAll"
  name: "HttpErrorResponse"
  ok: false
  status: 200
  statusText: "OK"
  url: "http://localhost:8080/api/paintings/getAll"
__proto__: HttpResponseBase

有人可以帮助理解和解决这个问题吗?并告诉我如何在 Angular 客户端上显示图像?已经卡了好几天了。

【问题讨论】:

    标签: node.js angular mean-stack multer


    【解决方案1】:

    如果您使用 Angular 的 HttpClient,默认的 responseTypejson - 您可能需要选择 blob

    responseType?: "arraybuffer" | "blob" | "text" | "json"
    

    查看HttpClient get request的重载

    调用类似于:

    return this.httpClient.get(url, {responseType:'blob'});
    

    【讨论】:

    • 行得通!我收到 blob。现在我如何从中获取图像。
    • 我得到了这个数据:application/octet-stream;base64,77+9UE5HDQoaCgAAAA1JSERSA......但是把它放到图像src中不起作用
    猜你喜欢
    • 2016-07-04
    • 2019-12-07
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 2012-09-14
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多