node.js - multer nodejs 模块 onFileUploadStart file.size 返回 0

标签 node.js file-upload asyncfileupload multer

我正在创建一个应用程序,该应用程序从 Node.js 中的多个客户端接收文件。为此,我使用 Express multer Node 模块。

在下面的代码中我处理文件上传:

app.use(multer({ dest: './uploads/',
    rename: function (fieldname, filename){
        return filename;
    },
    onFileUploadStart: function(file){
        console.log("file size: " + file.size);
        console.log(file.originalname + ' is starting...');
    },
    onFileUploadComplete: function(file){
        console.log(file.fieldname + ' uploaded to ' + file.path);
        done = true;
    },
    onFileUploadData: function(file, data){
        //console.log("data being received " + data);
    }
}));

但是当我进入onFileUploadStart内部时,file.size是0。

multer 文件对象是一个具有以下属性的 JSON 对象,因此我知道 size 属性存在。

fieldname - Field name specified in the form
originalname - Name of the file on the user's computer
name - Renamed file name
encoding - Encoding type of the file
mimetype - Mime type of the file
path - Location of the uploaded file
extension - Extension of the file
size - Size of the file in bytes
truncated - If the file was truncated due to size limitation
buffer - Raw data (is null unless the inMemory option is true)

为什么返回的大小为 0?

编辑: 虽然文件大小返回 0 文件的其他属性(如 file.originalname)正在工作并返回正确的名称。

编辑2: 当我在 onFileUploadStart 函数中打印文件时,我得到以下属性和关联值:

{
    filename: 'userFile',
    originalname: 'name.png',
    name: 'name.png',
    encoding: '7bit',
    mimetype: 'image/png',
    path: 'uploads\\name.png',
    extension: 'png',
    size: 0,
    truncated: null,
    buffer: null
}

为什么 multer Node 模块正确发送除文件大小之外的所有内容?

编辑3:

request.body 打印以下内容:

{ submit: 'upload file' }

这很奇怪。 我正在以下代码中打印请求正文:

app.post('/upload/', function(request, response){
    console.log(request.body);
    if (done == true){
        response.end('file uploaded');
    }
});

客户端可以上传文件的index.html文件:

<html>
    <head>

    </head>
    <body>
        <form id= "upload" enctype= "multipart/form-data" action="/upload/" method="post">
            <input type="file" name="userFile" />
            <input type="submit" name="submit" value="upload file" />
        </form>
    </body>
</html>

最佳答案

由于文件是流式传输的,因此您只能在上传完成后才能获取文件的总大小。

如果你看source可以看到初始大小设置为0,然后随着data一起增加事件。

关于node.js - multer nodejs 模块 onFileUploadStart file.size 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28453137/

相关文章:

node.js - Google Mapsengine 响应服务帐户权限不足

jsf - <t :inputFileUpload> not working anymore after migration JSF 1. 2 到 JSF 2.2

python - 如何在Django中访问上传的文件?

c# - 尝试上传具有 Angular 2 的文档时,Web API 中的文件计数始终为零

c# - 在 asp.net 中更新 UpdatePanel 中的图像 url

c# - 使用 C# 在 asp.net 中的 Viewstate 中没有获得值(value)?

javascript - Node.js MongoDB .findOne 在查询字符串时返回最佳匹配

node.js - nginx、node.js + 带 SSL 的 socket.io

node.js - 如何找到特定文档并更新数组内特定键的值?

c# - 如何清除服务器端的文件上传文本 (c#)