【问题标题】:SOLVED: Formidable doesn't work outside localhost已解决:强大在本地主机之外不起作用
【发布时间】: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


    【解决方案1】:

    实际上没有错误。我得到的错误是由于原始代码库中的错误设计导致的用户错误,看起来与此处发布的代码略有不同。此处发布的代码实际上完全可以正常工作。

    【讨论】:

    • stonks ,,,,,,,,,,,,
    猜你喜欢
    • 2022-01-19
    • 2012-06-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2011-04-17
    • 2019-01-19
    • 2015-02-25
    相关资源
    最近更新 更多