是时候,换个姿势关注TA
关注 功能升级,收割 TA 的最新动态
扫我下载最新九游APP
查看: 27|回复: 2
最后登录积分8402精华0帖子
Lv12渐入佳境, 经验 8402, 距离下一级还需 598 经验
发表于 昨天&15:35
sg是琳达好还是玲珑好啊
最后登录积分8402精华0帖子
Lv12渐入佳境, 经验 8402, 距离下一级还需 598 经验
发表于 昨天&15:40
来自九游APP
没人说下嘛
最后登录积分4925精华0帖子
Lv9略有小成, 经验 4925, 距离下一级还需 75 经验
发表于 昨天&20:05
这种问题随你自己心意,自己觉得那个好用自然就选哪个
安卓平台下载
苹果平台下载fs:貌似renameSync()文件时出错了 - CNode技术社区
这家伙很懒,什么个性签名都没有留下。
function upload(response, request) {
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");
console.log("F.U.P: "+files.upload.path);
fs.renameSync(files.upload.path, "/tmp/test.png");
response.writeHead(200, {"Content-Type": "text/html"});
response.write("received image:&br/&");
response.write("&img src='/show' /&");
response.end();
环境:win7、node.exe Ver 0.6.10
是因为权限问题吗?
运行报错:
E:\cygwin\home\dd\dodo&node index.js
F.U.P: C:\Users\dd\AppData\Local\Temp\68eff242cf7ae5b4595f31
return binding.rename(pathModule._makeLong(oldPath),
Error: ENOENT, no such file or directory 'C:\Users\dd\AppData\Local\Temp\68ef9
377b965f242cf7ae5b4595f31'
at Object.renameSync (fs.js:330:18)
at E:\cygwin\home\dd\dodo\requestHandlers.js:35:8
at IncomingForm.&anonymous& (E:\cygwin\home\dd\dodo\node_modules\formidabl
lib\incoming_form.js:117:9)
at IncomingForm.emit (events.js:64:17)
at IncomingForm._maybeEnd (E:\cygwin\home\dd\dodo\node_modules\formidable\
b\incoming_form.js:376:8)
at E:\cygwin\home\dd\dodo\node_modules\formidable\lib\incoming_form.js:207
at E:\cygwin\home\dd\dodo\node_modules\formidable\lib\file.js:59:5
at Object.oncomplete (fs.js:1289:9)
E:\cygwin\home\dd\dodo&
ENOENT 文件不存在 ,看看formidable临时文件写成功没?
另外文件同步操作得try{}catch(e){},要不然异常会导致进程直接退出
我看到临时文件夹里有上传的文件。
我参照的例子是:
上文贴出的是其中的最后一段代码。
fs.renameSync这个方法没有问题的,应该是你其他地方写错了
fs.rename 之前遇到过类似的问题,临时文件写成功了,但是就是无法移动…
猜测是由于磁盘分区导致的,你的例子中也符合这个条件 C: -& E:
改变formidable的默认零时文件夹路径,保证和目标目录处于同一个磁盘分区
formidable.IncomingForm.UPLOAD_DIR = your_path
这样应该ok的
function upload(response, request) {
console.log(&Request handler 'upload' was called.&);
var form = new formidable.IncomingForm();
form.uploadDir = &tmp&
// console.log(&about to parse&);
form.parse(request, function(error, fields, files) {
//console.log(&parsing done&);
console.log(&F.U.P: & + files.upload.path);
setTimeout(function(){
fs.renameSync(files.upload.path, &tmp/test.png&);
}catch(e){
console.log(e);
response.writeHead(200, {&Content-Type&: &text/html&});
response.write(&received image:&br/&&);
response.write(&&img src='/show' /&&);
response.end();
搞定了。谢谢你~
another reply:
我也碰到了这个问题,windows上会有。按照fish的方法解决了,只要在工程目录下建个目录A,然后把formidable的uploadDir指向这个目录(相对路径即可),就能使用这个目录了。
github上提了个issue,有人解释了。
我也遇到了这个问题。多谢指点,开始开到错误提示“文件或者目录不存在”,而且打印出的路径是指向C盘,将感到奇怪。现在搞定了,3Q。
将fs.renameSync(files.upload.path, “/tmp/test.png”);中的&/tmp/test.png&改为 &./tmp/test.png&也是可以的。我就是这么改的。
在Windows上尽量不要操作C盘,权限问题很麻烦的
我在winxp+node0.6下测试,你的这个方法出错,错误提示与楼主的类似
fs.rename()不能跨磁盘移动文件 renameSync 不能创建新目录
/home/hd-user/github/nodejs-beginner/requestHandlers.js:61
console.log(files.upload.path);
TypeError: Cannot read property 'path' of undefined
这个错误大概什么原因呢?
你的例子中的upload()是不是该过啊,files.upload.path 中的path 应该和请求路径的pathname 一致的
我也照抄的,这里的问题改了下,手动创建了tmp文件。
代码如下:
// 响应upload
var upload = function(response, request) {
console.log('Request handler &upload& was called.');
var form=new formidable.IncomingForm();
console.log('about to parse');
// 写一个临时路径
form.uploadDir='tmp';
form.parse(request,function(err,fields,files){
console.log('parsing done');
console.log(files.upload);
// 同步操作文件,需要try catch
fs.renameSync(files.upload.path,'tmp/test.png');
}catch(e){
console.log(e);
response.writeHead(200,{'Content-Type':'text/html'});
response.write('received img:&/br&');
response.write('&a href=&/show&&&img src=&/show& /&&/a&');
response.end();
// 显示文件
var show=function(response){
console.log('request handler &upload& was called');
fs.readFile('./tmp/test.png','binary',function(err,file){
response.writeHead(500,{'Content-Type':'text/plain'});
response.write(err+'\n');
response.end();
response.writeHead(200,{'Content-Type':'image/png'});
response.write(file,'binary');
response.end();
upload接口,更改了输出的html结构:response.write(’’);
不然在windows图片无法显示。
show接口,fs.readFile(’./tmp/test.png’)多了一个’./’,我还不知道这个是啥意思。
若不加的话,报错信息提示,位置是在:f:\tmp\test.png。估计加了’./'就在当前目录下寻找文件了。
/* Possible error on Windows systems:
tried to rename to an already existing file */
fs.rename(files.upload.path, “/tmp/test.png”, function(err) {
if (err) {
fs.unlink(&/tmp/test.png&);
fs.rename(files.upload.path, “/tmp/test.png”);
我也出现同样的的错误,已经按照大家的办法解决了,谢谢
我试了一下,其实不需要这一句
form.uploadDir = &tmp&
在绝大数系统中“/tmp/test.png”中的第一个“/”指的是系统根目录,具体见下面的链接
觉得应该是windows在node中不识别“/”所致,的问题也是这种情况。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的