node.js - 如何使用 Node 读取 PUT 文件?
问题描述
我正在尝试复制 bashupload.com 的功能,但使用节点。我想要做的简单,curl host -T file
但我遇到了一些问题,因为我似乎无法理解如何读取 PUT 文件。使用选项时,Curl 使用 PUT 请求-T
,因此它必须是 PUT。
我尝试使用以下软件包multiparty
:
receiveAndUploadFile: function (req, res) {
var multiparty = require('multiparty');
var form = new multiparty.Form();
// var fs = require('fs');
form.parse(req, function(err, fields, files) {
console.log('The files', files)
console.log('The fields', fields)
})
res.send("Okay, bye.")
}
但这会打印文件和字段的未定义值。
我也尝试过使用express-fileupload
中间件
app.use(fileUpload({}));
但是,如果我尝试打印,req.files
那么我会变得不确定。
是否有任何特定的方式来读取文件?非常感谢!
这是我的主文件 index.js::
const express = require("express");
const path = require("path");
const app = express();
const port = 8080;
const tools = require("./tools");
const fileUpload = require("express-fileupload");
app.use(fileUpload());
app.use(express.static(__dirname + "/assets"));
app.get("/", (req, res) => {
res.sendFile(path.join(__dirname + "/index.html"));
});
app.get("/f", (req, res) => {
res.send("This route is only available as a POST route.");
});
app.put("/f", tools.receiveAndUploadFile);
app.listen(port, () => {
console.log(`Server started listening on port: ${port}`);
});
还有 tools.js 文件:
const fs = require("fs");
const path = require("path");
module.exports = {
receiveAndUploadFile: function (req, res) {
console.log("Files: ", req.files);
res.send("Okay bye");
},
};
这是将“文件:未定义”打印到控制台。
解决方案
PUT 和 POST 实际上是同一件事。要上传任意数据,只需读取数据流并将其写入文件即可。Node 在流上提供了一个 .pipe 方法,可以轻松地将数据从一个流传输到另一个流,例如这里的文件流:
const fs = require('fs')
const express = require('express')
const app = express()
const PORT = 8080
app.get('/*', (req, res) => res.status(401).send(req.url + ': This route is only available as a POST route'))
app.put('/*', function (req, res, next) {
console.log('Now uploading', req.url, ': ', req.get('content-length'), 'bytes')
req.pipe(fs.createWriteStream(__dirname + req.url))
req.on('end', function () { // Done reading!
res.sendStatus(200)
console.log('Uploaded!')
next()
})
})
app.listen(8080, () => console.log('Started on :8080'))
如果您对 /file.mp4 执行 PUT,它会将所有数据上传到脚本目录 (__dirname) + URL 文件路径。
通过卷曲,curl http://localhost:8080/ -T hello.txt
推荐阅读
- .net - 未处理的异常:超时已过期。在从池中获取连接之前经过的超时时间
- python - 我正在开发一个网络爬虫。我收到一条警告信息。我有多脆弱?
- sql-server-2012 - 如何使用 ms sql server 基于 select 语句使用嵌套插入
- tensorflow - 在 Tensorflow 2 中分层批次
- entity-framework-core - 如何在不使用迁移的情况下确保 EF Core 中存在表?
- reactjs - 在 Create-Store 中将persistedState 放在哪里以将 redux 存储保存到 localStorage
- c# - 存储库模式似乎缺乏范围。如果我还有更多要查询怎么办?
- php - 如何将带有查找字段的潜在客户发送到动态 CRM(使用 PHP 和 AlexaCRM 工具包)?
- android - 将服务器图像下载到安卓内存卡
- lua - Lua 函数:如何使用表作为函数参数和自记录代码