如何在Node.js中找到文件的大小?

时间:2017-02-21 09:16:26

标签: javascript node.js express multer

我正在使用multer上传我的图片和文档,但这次我想限制上传,如果图片的大小> 2mb。如何找到文档文件的大小?到目前为止,我尝试如下,但没有工作。

var storage = multer.diskStorage({
      destination: function (req, file, callback) {
        callback(null, common.upload.student);
      },
      filename: function (req, file, callback) {  
        console.log(file.size+'!!!!!!!!!!!!!!')======>'Undefined'
        var ext = '';
        var name = '';
        if (file.originalname) {
          var p = file.originalname.lastIndexOf('.');
          ext = file.originalname.substring(p + 1);
          var firstName = file.originalname.substring(0, p + 1);
          name = Date.now() + '_' + firstName;
          name += ext;
        }
        var filename = file.originalname;
        uploadImage.push({ 'name': name });
        callback(null, name);
  }
});

有人可以帮助我吗?

8 个答案:

答案 0 :(得分:28)

var fs = require("fs"); //Load the filesystem module
var stats = fs.statSync("myfile.txt")
var fileSizeInBytes = stats["size"]
//Convert the file size to megabytes (optional)
var fileSizeInMegabytes = fileSizeInBytes / 1000000.0

或:

function getFilesizeInBytes(filename) {
    var stats = fs.statSync(filename)
    var fileSizeInBytes = stats["size"]
    return fileSizeInBytes
}

答案 1 :(得分:5)

如果您使用ES6进行解构,以字节为单位的文件大小仅占用两行(如果已经声明了fs模块,则只需一行):

const fs = require('fs');
const {size} = fs.statSync('path/to/file');

请注意,如果已经声明了size变量,这将失败。通过在使用冒号解构时重命名变量,可以避免这种情况:

const fs = require('fs');
const {size: file1Size} = fs.statSync('path/to/file1');
const {size: file2Size} = fs.statSync('path/to/file2');

答案 2 :(得分:1)

另外使用NPM文件大小软件包https://www.npmjs.com/package/filesize

此软件包使事情更具可配置性

var fs = require("fs"); //Load the filesystem module

var filesize = require("filesize"); 

var stats = fs.statSync("myfile.txt")

var fileSizeInMb = filesize(stats.size, {round: 0});

https://www.npmjs.com/package/filesize#examples

答案 3 :(得分:0)

@gerryamurphy上面的链接对我来说是无效的,因此我将链接到为此目的制作的软件包。

https://github.com/dawsbot/file-bytes

API很简单,应该易于使用:

fileBytes('README.md').then(size => { console.log(`README.md is ${size} bytes`); });

让我知道您是否需要任何帮助!

答案 4 :(得分:0)

您还可以从npm检查此软件包:https://www.npmjs.com/package/file-sizeof

API非常简单,它以objASI表示法提供文件大小。

IEC

结果对象的大小从const { sizeof } = require("file-sizeof"); const si = sizeof.SI("./testfile_large.mp4"); const iec = sizeof.IEC("./testfile_large.mp4"); (字节)到B(PB)。

PB

答案 5 :(得分:0)

对于寻找本机包的当前答案的任何人,这里是如何使用 fs(特别是 fsPromises)和 async/ 在不阻塞事件循环的情况下获取文件的 mb 大小await

const fs = require('fs').promises;
const BYTES_PER_MB = 1024 ** 2;

// paste following snippet inside of respective `async` function
const fileStats = await fs.stat('/path/to/file');
const fileSizeInMb = fileStats.size / BYTES_PER_MB;

答案 6 :(得分:0)

您可以找到以字节为单位的大小。

const libFS       = require('fs');
let yourFilesize  = fs.statSync("File path").size
console.log(yourFilesize)

答案 7 :(得分:-4)

使用以下内容:

window.require("fs")

不只是:

require("fs")

为我解决了这个问题。