求救啊,我上传文件始终不行啊,我按照教程用的是formidable插件,头都搞大了
发布于 1年前 作者 zhouaini528 1009 次浏览

我按照教程用的是formidable, 安装成功 引用文件没有问题,是最新版的。 根据教程和对比官方教程 就是设置不成功啊

function plug_file(req,res){//失败啊
 if (req.url == '/plug_file' && req.method.toLowerCase() == 'post') {
    // parse a file upload
    var form = new formidable.IncomingForm();
    form.parse(req, function(err, fields, files) {
      res.writeHead(200, {'content-type': 'text/plain'});
      res.write('received plug_file:\n\n');
      res.end(sys.inspect({fields: fields, files: files}));
    });
    return;
  }

  // show a file upload form
  res.writeHead(200, {'content-type': 'text/html'});
  res.end(
    '<form enctype="multipart/form-data" '+
    'method="post">'+
    '<input type="file" name="plug_file" multiple="multiple"><br>'+
    '<input type="submit" value="Upload">'+
    '</form>'
  );
}

到底什么地方有错啊? 上传后的结果就是

received plug_file:
{ fields: {}, files: {} }

但是教程里面上传成功会返回N多东西 为神马啊啊啊啊啊

10 回复

需要使用form.uploadDir设置一下上传路径。

还是不行啊,我设置了。在PHP中 html里的name="plug_file" 用 $_FILES[‘plug_file’]
nodejs 中咋个用??

form.uploadDir="./StaticResource/tmp" 就这样设置试试

还是不的行啊 脑壳都大了

设置的路径文件夹都创建了吧?这是我以前上传图片的服务端代码:

function upload(response, request){

logger.debug("Request handler 'upload' was called. ");
if (request.method.toLowerCase() == 'post'){
var form = new formidable.IncomingForm();
form.encoding = 'utf-8';
form.uploadDir = "./StaticResource/tmp"; //必须设置
form.keepExtensions = true;
form.parse(request, function(err, fields, files) {
if (err) {
    logger.error("upload err:" + err);
    response.end("{\"msg\":\"上传图片失败!\"}");
    return;
  }

  logger.error("uploading " + fields.username);

  fs.renameSync(files.upload.path, "./StaticResource/tmp/" + fields.username + ".jpg");
  response.end("{\"msg\":\"上传图片成功!\"}");
});

}

}

你如果是express直接在req.files里有

还是不行啊 我又弄了很久了

    if (req.url == '/plug_file' && req.method.toLowerCase() == 'post') {
     var postData = '';
    //测试是否上传数据成功
     req.on('data',function(data){
             postData+=data;
             });
    
     req.on('end',function(){
            console.log(postData);
    //终端能收到数据
            res.end();
            });
    
    var form = new formidable.IncomingForm();
    //用别人的模块上传
    
     form.uploadDir='/var/www/static';
     //form.keepExtensions = true;
     form.encoding = 'utf-8';
    
    form.parse(req, function(err, fields, files) {
       //console.log('formidable_ing');
       console.log(err);console.log(fields);console.log(files);
    //终端输出上传结果
          res.writeHead(200, {'content-type': 'text/plain'});
          res.write('received plug_file:\n\n');
          res.end();
        });
     console.log('formidable_end');
      }

终端结果是: [Error: MultipartParser.end(): stream ended unexpectedly: state = START_BOUNDARY] {} {}

express集成了formible的上传功能,包括上传大小限制,更改路径,取得上传资源的mime类型 app.use(express.bodyParser({ uploadDir: 'xx/’, keepExtension: true, //是否保持后缀 limit: ‘50mb’ //上传的最大量 })) 在前台页面的form表单要有enctype=’multipart/form-data’这样的头类型,要不然node的req就没有files这个属性 用express处理一般的上传够了

我也一样,一直报这个错: Error: MultipartParser.end(): stream ended unexpectedly: state = START_BOUNDARY

express 中有上传图片,可以在req.files.filename.path中读到上传图片的临时路径,然后rename就好

回到顶部