3

我有一个我试图完成的项目我想上传图片我可以上传图片但不能在应该上传的目录中

好的,让代码:

 app.post('/register',function(req,res) 
    {
var form = new formidable.IncomingForm();
form.keepExtensions = true;
form.uploadDir ='./uploaded/';
form
    .on('error', function(err) {
        throw err;
    })

    .on('field', function(field, value) {
        //receive form fields here
    })

    /* this is where the renaming happens */
    .on ('fileBegin', function(name, file){
            //rename the incoming file to the file's name
            file.path = form.uploadDir + "/" + file.name;
    })

    .on('file', function(field, file) {
        //On file received
    })

    .on('progress', function(bytesReceived, bytesExpected) {
        //self.emit('progess', bytesReceived, bytesExpected)

        var percent = (bytesReceived / bytesExpected * 100) | 0;
        process.stdout.write('Uploading: %' + percent + '\r');
    })

    .on('end', function() {


    });

form.parse(req);

问题是当我发布图像时......图像仍然保存在 process.env.TMP 我的 proyect 有这个 dir arq

proyect:
    node_modules
    uploaded
    public
    routes
    views
    app.js
    package.json

编辑 2:问题是 BODYPARSER

好的,从最后一个代码...问题是 app.js 当我配置应用程序时,它有一个 bodyParser ,因此 bodyParser 方法使用来自快递的强大功能

最后一个代码是正确且功能性的,如果有人想使用该代码......只需评论 express.configure 中的行

app.use(express.bodyParser());

关闭 express bodyparser 但 express 使用也很强大,所以是同一件事......

还有一个问题

我像这样配置 express.bodyParser

  app.use(express.bodyParser(
    {
      uploadDir: './uploads',
      keepExtensions: true
    }));

我像这样更改第一个代码

app.post('/register',function(req,res) 
{
  var oldDir=req.files.img.path;
  var newDir='./uploads/'+req.body.email+'/perfil/';

if(req.files)
{
  mkdirp(newDir,0777,function(err){
    if(err) throw err;
  })
}
if(req.files)
{
  fs.rename(oldDir,newDir+req.files.img.name,function(err){
    if(err) throw err;
  });

}
res.send('pow!');

它是功能性的,当此代码收到文件时,将文件放在上传文件夹中,然后使用电子邮件名称创建文件夹,最后将文件移动到电子邮件文件夹中,并将其重命名为带有扩展名的原始文件

这是完美的”!

不,没有完美……我想用这个方法

.on ('fileBegin', function(name, file){
            //rename the incoming file to the file's name
            file.path = form.uploadDir + "/" + file.name;
    })
    .on('progress', function(bytesReceived, bytesExpected) {
        //self.emit('progess', bytesReceived, bytesExpected)

        var percent = (bytesReceived / bytesExpected * 100) | 0;
        process.stdout.write('Uploading: %' + percent + '\r');
    })

因为从第一个代码我可以配置在第二个代码中从头开始放置文件的位置我在服务器收到文件后移动文件

我认为该方法是快递,因为快递使用像中间件一样强大

我该如何配置方法?

方法在哪里……?'?

我如何从第二个代码中知道 req.files 中包含的方法?(因为 req.files 使用 bodyParser() 与 form.file 在第一个代码中使用 formidable 相同)

全部

4

2 回答 2

8

IncomingForm 构造函数接受一个选项对象。您可能还需要在路径中使用 __dirname 全局变量。

var form = new formidable.IncomingForm({ uploadDir: __dirname + '/uploaded' });

您可以在强大的源代码中看到该选项是如何应用的。

于 2012-07-25T03:49:28.613 回答
-2

您可以在触发“end”时保留重命名代码,以便在文件完全上传后重命名。

于 2014-09-04T05:22:54.597 回答