图像未从Axios上传到文件系统Node.js

时间:2019-06-13 23:16:54

标签: node.js

我正在尝试通过调用URL生成QR图片并将其存储到我们的服务器中来为我们的产品生成QR。奇怪的是,如果我从文件本身运行该函数,它将起作用。但是,如果我使用来自客户端的GET请求运行此命令,它将无法正常工作。

QRGenerator Code.js

const axios = require('axios');
const fs = require('fs');
const Path = require('path');

let requestQRGenerate = async (Tag)=>{
console.log(Tag);



    var url = `https://chart.googleapis.com/chart?cht=qr&chs=150x150&chl=localhost:4200/pages/inventory/:${Tag}`


    const imagePath = `${Tag.split(':').join('.')}`;
    console.log(imagePath); 
    // let path = Path.resolve(__dirname, '../images',imagePath+'.jpg');
    let path = Path.resolve(__dirname, '../images');
    path = path + '/' + imagePath+'.jpg';
    //console.log(path+'/'+imagePath);


    const response = await axios({
        method: 'GET',
        url: url,
        responseType: 'stream'
    })


    response.data.pipe(fs.createWriteStream(path));

return new Promise((resolve,reject)=>{
    response.data.on('end', () =>{
        resolve('QR Generated for reel successfully')
    })
    response.data.on('error', (err)=>{
        reject(err);
    }) 
})

}

requestQRGenerate('06C-01003G-21:3975')


module.exports.requestQRGenerate = requestQRGenerate;

您可以说我在尝试许多尝试格式化字符串以将文件另存为的事情。我基本上需要将文件另存为Tag变量,并且由于文件名中不能包含“:”,因此将其替换为“。”。然后是.jpg。

inventoryController.js

exports.generateQRCode = 
async (req,res,next)=>{
try {
    let Tag = req.body.tag


    let TagRes = await requestQRGen.requestQRGenerate(Tag);

    res.status(200).send(TagRes)
} catch (e) {
    res.status(500).json({
        Status: "Error",
        Content: e 
    })
}

这是我尝试从GET请求执行函数时遇到的错误。

events.js:174
  throw er; // Unhandled 'error' event
  ^

Error: ENOENT: no such file or directory, open ' 
C:\Domains\App\images\06C-01003G-21.3975
.jpg'
Emitted 'error' event at:
at WriteStream.onerror (_stream_readable.js:713:12)
at WriteStream.emit (events.js:189:13)
at lazyFs.open (internal/fs/streams.js:272:12)
at FSReqWrap.args [as oncomplete] (fs.js:140:20)

我不明白为什么它不能通过GET请求工作,但是当我运行文件本身时却可以工作。

先谢谢了。

0 个答案:

没有答案