下面代码执行的时候,抛出异常,不解。。代码是按照Node入门照写的,之前在Linux下是可以正常执行的。昨天是些了Windows上却行不通。
form.parse(request, function(error, fields, files) {
console.log('parsing done');
fs.renameSync(files.upload.path, 'c:/tmp/test.png');
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('received image:<br/>');
response.write('<img src="/show" />');
response.end();
});
异常信息
17 回复
奇怪,windows的路径确实喊起来比较怪:
fs.renameSync(files.upload.path, 'c:\\tmp\\test.png');
这样子试试,理由是fs.rename不能提供跨磁盘的rename,如果是文件路径不准确(看起来是C盘,实际被识别成相对路径~),早期版本的node直接抛出文件找不到,之前提过一个issue,新版本已经增加了一个新的错误描述。
所以2楼问 node 的版本还是有道理的。
是不是有其他的错误可能,就不知道了~
@sottish 这段代码没问题: formidable 1.0.9
在Windows 7系统上的Node.js v0.6.11
、 v0.6.14
、 v0.6.15
上运行均能正常。
var http = require('http');
var formidable = require('formidable');
var fs = require('fs');
var server = http.createServer(function (request, response) {
if (/POST|PUT/img.test(request.method)) {
var form = new formidable();
form.parse(request, function(error, fields, files) {
console.log('parsing done', error, fields, files);
fs.renameSync(files.upload.path, 'c:/tmp/test.png');
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('received image:<br/>');
response.write('<img src="/show" />');
response.end();
});
}
else if (request.url == '/show') {
fs.readFile('c:/tmp/test.png', function (err, data) {
if (err)
console.log(err.stack);
response.end(data);
});
}
else {
response.end('请上传一个文件');
}
});
server.listen(80);
@leizongmin 我这边代码是这么写的,和书上差不多把,如果用renameSync的话,会抛出以上我提出的异常,如果用rename的把,虽然不会抛出异常,但是代码执行过后,图片也未上传。
function upload(request, response) {
console.log('request handler \'upload\' was called.');
var form = new formidable.IncomingForm();
console.log('about to parse');
form.parse(request, function(error, fields, files) {
console.log('parsing done');
fs.rename(files.upload.path, 'd:\\tmp\\test.png');
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('received image:<br/>');
response.write('<img src="/show" />');
response.end();
});
}