Windows环境下Node.js+formidable上传文件后无法找到临时文件求助
解决Windows下Formidable上传文件找不到临时文件的问题
问题根源
你的代码仅完成了文件上传的解析,但没有输出临时文件的具体路径,且Formidable默认的系统临时目录比较隐蔽;另外,临时文件会在请求结束后被自动清理,不及时处理就会消失。
解决方案
1. 查看临时文件路径并避免自动清理
修改代码,在回调中获取临时文件的完整路径,同时可以自定义临时目录(更易查找),保留文件后缀:
var http = require('http'); var formidable = require('formidable'); var fs = require('fs'); // 引入文件操作模块 http.createServer(function (req, res) { if (req.url == '/fileupload') { var form = new formidable.IncomingForm(); // 自定义临时目录(可选,建议设置,替代系统默认隐蔽目录) form.uploadDir = './temp_uploads'; // 保留文件原始后缀,方便识别类型 form.keepExtensions = true; // 确保临时目录存在,不存在则自动创建 if (!fs.existsSync(form.uploadDir)) { fs.mkdirSync(form.uploadDir, { recursive: true }); } form.parse(req, function (err, fields, files) { if (err) { res.write('上传出错: ' + err.message); return res.end(); } // 获取上传文件的临时路径和原始名称 var tempFilePath = files.filetoupload.filepath; var originalName = files.filetoupload.originalFilename; res.write('文件上传成功<br>'); res.write('临时文件路径: ' + tempFilePath + '<br>'); res.write('原始文件名: ' + originalName); res.end(); }); } else { res.writeHead(200, {'Content-Type': 'text/html'}); res.write('<form action="fileupload" method="post" enctype="multipart/form-data">'); res.write('<input type="file" name="filetoupload"><br>'); res.write('<input type="submit">'); res.write('</form>'); return res.end(); } }).listen(8080);
2. 关键设置说明
form.uploadDir: 指定自定义临时目录,比如项目根目录下的temp_uploads,比系统默认临时文件夹更容易定位form.keepExtensions: 保留文件原始后缀,避免临时文件变成无后缀的陌生文件fs.existsSync+fs.mkdirSync: 确保自定义目录存在,防止因目录缺失报错- 通过
files.filetoupload.filepath获取临时文件的绝对路径,直接访问该路径即可找到文件
3. 持久化保存文件(可选)
如果需要长期保留上传的文件,可在回调中把临时文件移动到持久化目录:
// 在parse的回调内添加这段代码 var targetPath = './uploads/' + originalName; // 移动临时文件到目标目录 fs.rename(tempFilePath, targetPath, function(err) { if (err) { res.write('保存文件失败: ' + err.message); return res.end(); } res.write('文件已保存到: ' + targetPath); res.end(); });
注意提前创建uploads目录,或用fs.mkdirSync自动创建。
验证步骤
- 运行修改后的代码,访问
http://localhost:8080 - 选择文件上传,页面会显示临时文件的具体路径
- 打开对应的路径,就能找到上传的文件
内容的提问来源于stack exchange,提问作者Helper123
相关产品推荐
相关产品推荐

