Node.js 使用nodejs来回发送文件

Node.js 使用nodejs来回发送文件,node.js,json,rest,Node.js,Json,Rest,我已经在多个地方询问和搜索了这个问题,但没有找到任何答案。所以 我有一个实现Rest方法的express服务器。我的客户可以发送和接收他们的数据和所有,但我希望他们也能够发送文件,服务器应按需将文件发送回客户。通过JavaScript,我可以使用formData,但我想知道或学习正确的方法。其中一个是base64字符串。有谁能给我一个简单的在Rest环境中来回发送文件的例子吗?还是带我去?谢谢关于如何发送REST请求,我说我们没有REST请求,REST只是一个接受get、post、put和del

我已经在多个地方询问和搜索了这个问题,但没有找到任何答案。所以
我有一个实现
Rest
方法的express服务器。我的客户可以发送和接收他们的数据和所有,但我希望他们也能够发送文件,服务器应按需将文件发送回客户。通过JavaScript,我可以使用
formData
,但我想知道或学习正确的方法。其中一个是base64字符串。有谁能给我一个简单的在Rest环境中来回发送文件的例子吗?还是带我去?谢谢关于如何发送REST请求,我说我们没有REST请求,REST只是一个接受get、post、put和del请求的设计。因此,您可以在没有RESTful设计的情况下工作

您可以使用为上载文件而优化的

首先使用multer定义上载帮助器:

const multer = require('multer');
const mkdirp = require('mkdirp');
const fs = require('fs');

const getDirImage = () => {
    let year = new Date().getFullYear();
    let month = new Date().getMonth() + 1;
    let day = new Date().getDay();
    return `${config.homedir}/public_html/uploads/images/${year}/${month}/${day}`;
};
const ImageStorage = multer.diskStorage({
    destination: (req, file, cb) => {
        let dir;
        if (file.mimetype === 'text/css') {
            dir = getDirCss();
        } else {
            dir = getDirImage();
        }
        mkdirp(dir, (err) => cb(null, dir))
    },
    filename: (req, file, cb) => {
        let filePath;
        if (file.mimetype === 'text/css') {
            filePath = getDirCss() + '/' + file.originalname;
        } else {
            filePath = getDirImage() + '/' + file.originalname;
        }

        if (!fs.existsSync(filePath))
            cb(null, file.originalname);
        else
            cb(null, Date.now() + '-' + file.originalname);

    }
});
const uploadImage = multer({
    storage: ImageStorage,
    limits: {
        fileSize: 1024 * 1024 * 10
    }
});
module.exports = uploadImage;
在路由文件中:

const upload = require('path/to/upload/helper');
router.post('/imageUpload', upload.single('image'), imageValidator.handle(), imageController.update);
然后您可以在
req.file

关于将iamge返回给用户,您可以将其url返回到您的上载文件夹中,以便他们可以获取它;但为此,您需要提供静态文件:

app.use(express.static('your_upload_dir'));
现在,您可以在以下位置访问静态文件:

您的url/文件的位置

或者:
localhost:your_app_端口/文件的位置

如果您正在本地主机上测试


如果要限制对这些文件的访问,可以使用中间件检查用户的令牌、IP或其他内容。困难的部分是创建一个模型来存储文件名和url,以及一个按文件名请求文件的路径。

我建议您查找有关如何将文件上载到
express
服务器以及如何从服务器下载文件的教程,因为有很多教程。关于如何发送REST请求,我说我们没有REST请求,REST只是一个接受get、post、put、del请求的设计。所以你工作的时候没有休息,谢谢。我已经在用这个方法了。真的很感谢你多走了一英里去张贴它。我目前将文件url作为响应发送给前端处理。这是一种可接受的做法吗?提出此问题的主要原因是理解内容类型标题。比如什么时候我可以真正使用内容头。有时候,在静态文件不需要保护和授权的情况下,这样做是可以的。(比如烹饪类网站),但当保护文件很重要时,你就知道怎么做了。如果你只是想加深对某一特定部分的知识,你最终会80岁,你只会知道如何保护:)别担心。我使用
multe
r。我在考虑如何将文件作为rest请求发送到我的服务器,反之亦然。因此,在这个方法中,我仍然必须使用FormData。有没有办法发布没有表单数据的文件?我不知道如何在评论中传递链接,请在google中搜索短语
express how to send file without form data
,然后试试。这是我尝试的第一件事。没什么可说的:(那么对不起,我也是个新手。我在4个月内学会了express js