Resumable.js无法将文件保存到服务器端目录

时间:2015-10-22 18:31:25

标签: javascript node.js file save transfer

我在我的Node.js-express应用程序中使用Resumable.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' }

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

2 个答案:

答案 0 :(得分:4)

不是专家,但是我确实尝试过,并为您找到了一个实例。你没有在你的问题中提供足够的信息,所以我将从头开始。

我关注了官方github回购和提供的示例,我不得不进行一些调整,以便将文件块保存在特定目录中,然后进行更多调整以将这些块重新组合在一起并进行更多调整之后删除不必要的块。显然所有这些调整都是代码中提供的提示,以及我浏览过的其他地方。显然flow.js也在使用类似的机制(并不完全确定)。

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

  1. 将目录位置传递给可以添加文件块的位置
  2. 提供必要的条件和命令,以便在上传块时,创建写入流,然后使用可恢复的块将块拼接在一起并将其保存为原始文件。
  3. 最后删除所有块
  4. 使用gist使快递应用程序正常工作的说明(您可以查看官方github示例并进行更改,或者您可以按照以下说明操作):

    1. 创建目录
    2. 从目录中的gist创建app.js,resumable.js和resumable-node.js
    3. 复制/粘贴package.json并执行npm安装以获取模块(或手动npm install这些expresspathfs,{{ 1}})
    4. 在主app目录中创建connect-multiparty目录并确保它是可写的
    5. 以{。{1}}的形式复制/移过包含uploads public的{​​{1}}目录,并iconsstyle.css进行上传
    6. 更改您刚刚复制到我的案例index.html中的服务器地址的公共目录中index.html的行target49中的50
    7. 您可以在index.html中调整块大小,同时块上传的数量等,但是,我将它们保留为默认值(事实上,我将块从3更改为4)
    8. 完成以上所有操作后,您就可以开始了。
    9. 运行应用程序,即nodemon app.js或node app.js
    10. 导航到您的服务器地址或here,您将看到index.html呈现如下所示:
    11. http://localhost:3000/upload

      下面的控制台日志(注意结束 - 移除了块。)

      enter image description here

      最后我在uploads目录中有http://localhost:3000/upload

      <强> TL; DR

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

      已调整

      index.html 以更改目标值,以便在我的情况下将其指向服务器网址enter image description here

      image2.jpg
      已调整

      app.js 以向var r = new Resumable({ target:'http://localhost:3000/upload', chunkSize:1*1024*1024, simultaneousUploads:4, testChunks:false, throttleProgressCallbacks:1 }); 发送保存文件的目录(最顶层)。

      resumable

      我还调整了 app.js 来更改var resumable = require('./resumable-node.js')(__dirname + "/uploads"); 的内容,请参阅http://localhost:3000/upload

      app.post('/uploads',...)

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

      // 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': '*'
          });
        });
      });
      

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

答案 1 :(得分:1)

我没有使用Resumable.js但类似的东西,这就是我在Nodejs / express服务器中的做法。您还可以在此处查看更多服务器代码:https://github.com/MichaelLeeHobbs/roboMiner/tree/master/server/api/world但是请记住它不完整且具有实验性。以下代码只是一个简单的例子。

include("class.library.php");
$data = new db_connect;
$data->settings();
echo $name; // I tried this but didn't work, I put this just to make things more clearly.