初学Nodejs,过程中,遇到上传图片失败的问题!请Nodejs虾指教指教!

初学Nodejs,过程中,遇到上传图片失败的问题!请Nodejs虾指教指教!

在学习NodeJs过程中,本人是按照《Node入门》来学习的。一开始前面都正常运行,但在最后阶段,学习本地图片上传的时候,显示如下错误信息,请大虾们赐教! 本人使用的是Node.js 0.10.5的版本。谢谢!

fs.js:543 return binding.rename(pathModule._makeLong(oldPath), ^ Error: ENOENT, no such file or directory 'C:\Users\ADMINI~1\AppData\Local\Temp\0 4269fe537101b9e3a9189349ccac5e6’ at Object.fs.renameSync (fs.js:543:18) at C:\inetpub\wwwroot\node\requestHandlers\requestHandlers.js:34:12 at IncomingForm.<anonymous> (C:\inetpub\wwwroot\node\node_modules\formidable \lib\incoming_form.js:92:9) at IncomingForm.EventEmitter.emit (events.js:92:17) at IncomingForm._maybeEnd (C:\inetpub\wwwroot\node\node_modules\formidable\l ib\incoming_form.js:533:8) at C:\inetpub\wwwroot\node\node_modules\formidable\lib\incoming_form.js:211: 12 at WriteStream.<anonymous> (C:\inetpub\wwwroot\node\node_modules\formidable
lib\file.js:70:5) at WriteStream.g (events.js:175:14) at WriteStream.EventEmitter.emit (events.js:117:20) at finishMaybe (_stream_writable.js:344:12)


5 回复

根据你提供的错误信息和描述,看起来你在尝试将上传的图片文件移动到另一个位置时遇到了问题。错误 ENOENT 表明系统找不到指定的路径。这可能是因为目标目录不存在或路径格式不正确。

为了帮助你解决这个问题,我会提供一个简单的Node.js示例代码,展示如何使用multer库来处理文件上传,并确保文件被正确地保存到服务器上的某个目录中。

首先,你需要安装multer库:

npm install multer

接下来是示例代码:

服务器端代码

const express = require('express');
const multer = require('multer');

const app = express();

// 设置存储引擎
const storage = multer.diskStorage({
    destination: function(req, file, cb) {
        // 指定存储目录
        const uploadDir = './uploads';
        // 如果目录不存在,则创建它
        if (!fs.existsSync(uploadDir)){
            fs.mkdirSync(uploadDir);
        }
        cb(null, uploadDir);
    },
    filename: function(req, file, cb) {
        // 使用原始文件名作为文件名
        cb(null, file.originalname);
    }
});

const upload = multer({ storage: storage });

app.post('/upload', upload.single('image'), (req, res) => {
    try {
        res.send(`File uploaded successfully as ${req.file.filename}`);
    } catch (error) {
        res.status(500).send('Error uploading file.');
    }
});

app.listen(3000, () => console.log('Server started on port 3000'));

HTML表单

在你的HTML页面中添加一个简单的文件上传表单:

<!DOCTYPE html>
<html>
<head>
    <title>Upload Image</title>
</head>
<body>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="image" accept="image/*" required>
        <button type="submit">Upload</button>
    </form>
</body>
</html>

这段代码首先设置了文件存储的位置(./uploads),如果该目录不存在,则会自动创建它。然后,当用户提交带有文件的表单时,文件会被保存到指定的目录中。

通过这种方式,你可以避免由于路径错误导致的文件上传失败问题。希望这对解决问题有所帮助!


var form = new formidable.IncomingForm(); form.uploadDir="./StaticResource/tmp";//这个文件路径要设置

谢谢,真的出现在路径设置上。 原文里的“fs.renameSync(files.upload.path, “/tmp/test.png”);”里的路径设置要根据自己设置的情况更改! 谢谢您为我解答~~

可阅读node高级课程 《Node服务器框架开发实战》

QQ群 244728015

根据你的描述,你遇到了一个文件上传时出现的 ENOENT 错误,这意味着 Node.js 在尝试重命名或移动文件时找不到指定路径的文件。这通常与文件路径、权限或文件处理逻辑有关。

以下是一些可能的原因和解决方案:

1. 文件路径问题

确保你在处理文件路径时使用了正确的格式。在 Windows 上,路径中的反斜杠 \ 可能需要转义,或者你可以使用正斜杠 /

2. 文件权限问题

确保 Node.js 进程有权限访问和修改文件所在的目录。

3. 文件处理逻辑问题

检查你的文件处理逻辑,确保你在调用 fs.renameSync() 或其他文件操作函数之前,文件已经被正确地创建和写入。

示例代码

以下是一个简单的文件上传示例,使用 expressmulter 库来处理文件上传:

const express = require('express');
const multer = require('multer');

const app = express();
const upload = multer({ dest: 'uploads/' });

app.post('/upload', upload.single('image'), (req, res) => {
    try {
        // 检查文件是否成功上传
        if (!req.file) {
            return res.status(400).send('No file uploaded.');
        }
        res.send('File uploaded successfully.');
    } catch (error) {
        console.error(error);
        res.status(500).send('An error occurred.');
    }
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

在这个示例中:

  • 使用 multer 处理文件上传。
  • 设置 dest 参数为 'uploads/',指定文件保存的目录。
  • 在处理请求时,检查 req.file 是否存在,以确保文件被成功上传。

解决方案

根据错误日志中的路径 C:\Users\ADMINI~1\AppData\Local\Temp\04269fe537101b9e3a9189349ccac5e6,你可以检查该临时文件是否存在,并确保你正在尝试重命名或移动的文件路径是正确的。

如果以上方法都不能解决问题,建议你提供更多的代码细节以便更准确地诊断问题。

回到顶部