【发布时间】:2021-03-31 19:40:42
【问题描述】:
我已经使用 formidable 创建了一个基本的文件上传网站。文件上传器在我的本地主机上工作,但是当其他设备使用我的网站上传文件时它不起作用,并且我收到来自await fs.writeFile(newPath, rawData); 的错误。我检查了强大的files 对象,files.name 属性设置为''(我上传时设置为文件名,但其他设备上传时设置为'')。另外当其他设备上传时,files.path路径下的文件始终为空。
import express from "express";
import path from "path";
import fs from "fs/promises";
import { Fields, Files, IncomingForm } from "formidable";
const formidable = require("formidable");
const PORT = 8000;
const app = express();
const resourcePath = path.resolve(__dirname, "..", "..", "resources");
app.get("/", async (req, res) => {
res.sendFile(path.resolve(__dirname, "..", "public", "index.html"));
});
app.post("/api/upload", (req, res, next) => {
console.log("/api/ hit");
const form: IncomingForm = new formidable.IncomingForm();
// let form: IncomingForm = formidable({ multiples: true });
form.parse(req, async (err: any, fields: Fields, files: Files) => {
if (err) {
console.log("THERE WAS ERROR!");
next(err);
return;
}
const oldPath: string = files.someExpressFiles.path;
const newPath: string = path.join(
__dirname,
files.someExpressFiles.name
);
// raw data
let rawData: any;
try {
rawData = await fs.readFile(oldPath);
} catch (err) {
console.log("1", err);
}
try {
await fs.writeFile(newPath, rawData);
res.send("Successfully uploaded");
} catch (err) {
console.log("2", err);
}
});
});
这是强大的files 对象,当我的笔记本电脑以外的计算机上传时:
files {
someExpressFiles: File {
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
size: 0,
path: 'C:\\Users\\myName\\AppData\\Local\\Temp\\upload_75928c3230dd986d613067faeb3df9ff',
name: '',
type: 'application/octet-stream',
hash: null,
lastModifiedDate: null,
_writeStream: WriteStream {
_writableState: [WritableState],
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
path: 'C:\\Users\\myName\\AppData\\Local\\Temp\\upload_75928c3230dd986d613067faeb3df9ff',
fd: 3,
flags: 'w',
mode: 438,
start: undefined,
autoClose: true,
pos: undefined,
bytesWritten: 0,
closed: false,
[Symbol(kFs)]: [Object],
[Symbol(kCapture)]: false,
[Symbol(kIsPerformingIO)]: false
},
[Symbol(kCapture)]: false
}
}
我的html文件:
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h1>Hello World!</h1>
<form action="/api/upload/" enctype="multipart/form-data" method="post">
<!-- <input type="file" multiple /> -->
<input type="file" name="someExpressFiles" multiple="multiple" />
<input type="submit" value="UPLOAD" />
</form>
</body>
</html>
有谁知道为什么会发生这种情况以及解决方案,以便文件上传可以从其他设备工作?
【问题讨论】:
标签: node.js typescript file-upload formidable