Javascript Resubable.js可以';t将文件保存到服务器端目录

Javascript Resubable.js可以';t将文件保存到服务器端目录,javascript,node.js,file,save,transfer,Javascript,Node.js,File,Save,Transfer,我在Node.js-express应用程序中使用resubable.js。我可以知道文件传输是成功的,因为我可以看到console.log(req.body)和下面的内容 { resumableChunkNumber: '77', resumableChunkSize: '1048576', resumableCurrentChunkSize: '1064195', resumableTotalSize: '80755971', resumableType: '', resu

我在Node.js-express应用程序中使用resubable.js。我可以知道文件传输是成功的,因为我可以看到console.log(req.body)和下面的内容

{ resumableChunkNumber: '77',
  resumableChunkSize: '1048576',
  resumableCurrentChunkSize: '1064195',
  resumableTotalSize: '80755971',
  resumableType: '',
  resumableIdentifier: '80755971-humanfastq',
  resumableFilename: 'human.fastq',
  resumableRelativePath: 'human.fastq',
  resumableTotalChunks: '77' }

文档对这一点之后该做什么相当模糊。我需要将此文件保存到服务器上的目录中。任何关于如何实现这一点的帮助都将不胜感激。谢谢

我没有使用Resumable.js,而是使用类似的东西,下面是我在Nodejs/express服务器中的操作方法。您还可以在这里查看更多的服务器代码:但是请记住,它并不完整,而且是实验性的。下面的代码只是一个简单的示例

    import move from '../../libraries/fsMove.js';

    export function create(req, res) {
      var file = req.files.file;
      console.log(file.name);
      console.log(file.type);
      console.log(file.path);
      console.log(__dirname);
      move(file.path, __dirname + '/../../uploads/worlds/' + file.originalFilename, function(err){
        if (err) {
          console.log(err);
          handleError(res)(err);
          return;
        }
        World.createAsync(req.body)
          .then(responseWithResult(res, 201))
          .catch(handleError(res));
      });
    }

    // fsMove.js
    // http://stackoverflow.com/questions/8579055/how-i-move-files-on-node-js/29105404#29105404
    var fs = require('fs');

    module.exports = function move (oldPath, newPath, callback) {
      fs.rename(oldPath, newPath, function (err) {
        if (err) {
          if (err.code === 'EXDEV') {
            copy();
          } else {
            callback(err);
          }
          return;
        }
        callback();
      });

      function copy () {
        var readStream = fs.createReadStream(oldPath);
        var writeStream = fs.createWriteStream(newPath);

        readStream.on('error', callback);
        writeStream.on('error', callback);
        readStream.on('close', function () {

          fs.unlink(oldPath, callback);
        });

        readStream.pipe(writeStream);

      }
    }; 

不是专家,但我确实尝试了一下,得到了一个对你有用的例子。你在你的问题中没有提供足够的信息,所以我将从头开始

我遵循官方回购协议和提供的样本,我必须做一些调整,以便将文件块保存在特定目录中,然后再进行更多调整,将这些块重新缝合在一起,然后再进行更多调整,删除不必要的块。显然,所有这些调整都是代码中提供的提示,以及我浏览过的其他地方。Appearnly也使用了类似的机制(不完全确定)

我基本上需要更改其中一个示例中的
app.js
,以便能够从浏览器上载文件,然后将其保存在本地

  • 将目录位置传递到应添加文件块的resumable
  • 提供必要的条件和命令,以便在上载块时创建写入流,然后使用resumable将块缝合在一起并将其保存为原始文件
  • 最后删除所有的块
  • 使用以使express应用程序正常工作的说明(您可以签出官方github示例并进行更改,也可以按照以下说明进行操作):

  • 创建目录
  • 从目录中的gist创建app.js、resumable.js和resumable-node.js
  • 复制/粘贴
    package.json
    并进行npm安装以获取模块(或手动
    npm安装
    这些
    express
    路径
    fs
    连接多方
  • 在主应用程序目录中创建
    uploads
    目录,并确保其可写
  • 复制/通过
    public
    目录,该目录包含.png文件形式的
    图标和
    style.css
    index.html
    ,用于上传
  • 在我的案例中,更改刚刚复制到服务器地址的公共目录index.html的
    49
    50
    行中的
    target
    http://localhost:3000/upload
  • 您可以在index.html中调整块大小、同时上传块的数量等,但我将它们保留为默认值(事实上,我将块从3更改为4)
  • 做了以上所有的事,你就可以走了
  • 运行应用程序,即nodemon app.js或node app.js
  • 导航到您的服务器地址或,您将看到index.html呈现如下所示:
  • 下面的控制台日志(请注意已删除的结束块)

    最后,我在uploads目录中有
    image2.jpg

    TL;DR

    您需要对app.js和index.html文件进行以下调整,才能通过resubable.js上传和保存上传的文件

    在我的例子中,index.html被调整为将目标值指向服务器url

    app.js已经过调整,可以发送
    resubable
    一个保存文件的目录(最上面)

    我还调整了app.js以更改app.post('/uploads',…)
    see的内容

    最后对app.js的最后一个调整是在最后一个路由处理程序中,如下文件

    s.createReadStream("./resumable.js").pipe(res);
    

    我将resubable.js文件移动到与其他文件相同的目录中,因此我需要调整并更改其位置,以便createReadStream能够找到它

    任何github示例都会让人惊讶..好的,文件本身位于'req.files.file'中。。。所以我有一个javascript变量,它是一个文件。。var file=req.files.file。。。。如何将此变量作为文件保存到服务器上的特定目录中?我知道如何使用“fs”将.txt文件写入服务器。这样我就可以将文件写入服务器。我可以控制台有关该文件的.log()数据。但无法确定必须将什么对象传递到fs.writeFile(文件名、文件、回调)中,而该文件实际上是。。。现在它只保存[对象]
    var resumable = require('./resumable-node.js')(__dirname + "/uploads");
    
    // Handle uploads through Resumable.js
    app.post('/upload', function(req, res){
      resumable.post(req, function(status, filename, original_filename, identifier){
        if (status === 'done') {
          var stream = fs.createWriteStream('./uploads/' + filename);
    
          //stich the chunks
          resumable.write(identifier, stream);
          stream.on('data', function(data){});
          stream.on('end', function(){});
    
          //delete chunks
          resumable.clean(identifier);
        }
        res.send(status, {
            // NOTE: Uncomment this funciton to enable cross-domain request.
            //'Access-Control-Allow-Origin': '*'
        });
      });
    });
    
    s.createReadStream("./resumable.js").pipe(res);