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