如何使用 node.js 从指定路径发送文件以响应本地存储

how to send file from specified path in response from local storage using node.js

我有路径tmp\daily_gasoline_report。其中 9 是 uniqe-id,每次我想从该文件夹发送图像作为响应时,它都会不同。我怎样才能发送该文件作为回应??

我试过 fs

    if (!req.body.path) {
        logger.warn(error.MANDATORY_FIELDS);
        return res.status(500).send(error.MANDATORY_FIELDS)
    }
    
    let directory_name = req.body.path;
    
    let filenames = fs.readdirSync(directory_name);

    console.log("\nFilenames in directory:"); 
    filenames.forEach((file) => { 
        console.log("File:", file); 
    }); 

    let result = error.OK
    result.data = filenames

    logger.info(result);
    return res.status(200).send(result)

我只得到文件名而不是文件,但现在我有 Url 中的文件名以及来自前端的路径和文件名,所以我如何从路径发送文件作为响应

您需要将路径中的所有文件压缩并发送zip文件夹,不能发送多个文件。

同时交叉检查您的要求,如果文件大小过大,您的应用程序将崩溃

试试这个,

let directory_name = req.body.path;

let filenames = fs.readdirSync(directory_name);

let resultantArr = [];

console.log("\nFilenames in directory:"); 
filenames.forEach((file) => { 
    console.log("File:", file); 

    var fr = new FileReader();
    fr.onload = function () {
        var data = fr.result;
        var array = new Int8Array(data);
        resultantArr.push(JSON.stringify(array, null, '  '));
    };
    fr.readAsArrayBuffer(file);

}); 

let result = error.OK
result.data = resultantArr;

logger.info(result);
return res.status(200).send(result)

@Arya 这里是code-snippet处理图片文件:

let fr = new FileReader();
fr.onloadend = function(event) {
    let base64Data = fr.result;
    let arrayBufferView = new Uint8Array(base64Data);
    let blob = new Blob( [ arrayBufferView ], { type: file.type } );
    resultantArr.push(blob);
}
fr.readAsArrayBuffer(file);

稍后要读取数组的 blob 值并从中创建图像 url,您可以这样做:

let urlCreator = window.URL || window.webkitURL || {}.createObjectURL;
let imageUrl = urlCreator.createObjectURL( blob );

我得到了答案

这对我从文件夹中获取单个图像很有用

 const fs = require('fs');
 const url = require('url')

    let query = url.parse(req.url, true).query;
    let pic = query.image;
    let id = query.id

    let directory_name = "tmp/daily_gasoline_report/" + id + "/" + pic

    let filename = fs.existsSync(directory_name);

    if (filename) {

        //read the image using fs and send the image content back in the response
        fs.readFile(directory_name, function (err, content) {
            if (err) {
                res.writeHead(400, { 'Content-type': 'text/html' })
                console.log(err);
                res.end("No such image");
            } else {
                //specify the content type in the response will be an image
                res.writeHead(200);
                res.end(content);
            }
        });