流式传输字节流从请求到S3与诺克斯上的node.js字节、流式、js、node

2023-09-11 09:27:31 作者:13.寄居者

我试图用诺克斯上的node.js直流的八位字节流S3 。在八位字节流是一个XHR文件上传从浏览器。我以为我可以只流请求到putStream,一切都将只是工作,但很可惜没有。

下面是我的code:

  VAR的客户= knox.createClient({
           //此处AWS凭据
         });
如果(req.headers ['内涵式']。比赛(/应用程序\ /八位字节流/ I)){

  VAR文件名='/'+req.headers['x-file-name'];

  client.putStream(REQ,文件名,函数(ERR,RES){
    // TODO:发现错误
    身体='{成功:真正的}
    res.writeHead(200,
      {内容类型:text / html的'
      ,内容长度:body.length
      })
    res.end(体)
  });

}
 

和错误我收到:

 类型错误:错误的参数
    在Object.stat(fs.js:354:11)
    在Client.putStream(./lib/knox/client.js:181:6)
 
方舟编译器JS运行时子系统 ARK JS 正式开源

解决方案

我在做这样的事情:

  app.post('/ uploadAmazon',功能(REQ,RES){
VAR PARAMS = req.query;

VAR请求= client.request(PUT,/+ req.header(X文件名')+'?型号='+ params.partNumber
        +'&安培; uploadId ='+ params.uploadId,{
    内容长度:req.header(内容长度)
});

req.on('数据',功能(数据){
    request.write(数据);
});


request.on('回应',函数(响应){
    的console.log('部分'+ params.partNumber +'状态code:'+ response.status code);
    如果(response.status code == 200){
        uploadMap [params.id] .currentSize ++;
        uploadMap [params.id] .completeXmlArray [+(params.partNumber) -  1] ='<部分><型号> + params.partNumber +'< /型号>< ETag的> + response.headers.etag +'< / ETag的>< /部件> ;

        如果(uploadMap [params.id] .currentSize == uploadMap [params.id] .totalSize){
            uploadMap [params.id] .uploadId = params.uploadId;
            completeSend(uploadMap [params.id]);
        }
    }
})。结束();

res.end();
 

});

假设我收到的文件名,零件编号和uploadId从岗位。

I'm trying to stream an octet-stream straight to S3 using knox on node.js. The octet-stream is an XHR file upload from the browser. I assumed that I could just stream the request into putStream and everything would just work, but alas no.

Here's my code:

var client = knox.createClient({ 
           // AWS credentials here
         });
if (req.headers['content-type'].match(/application\/octet-stream/i)) {

  var filename = '/'+req.headers['x-file-name'];

  client.putStream(req, filename, function(err, res){
    // TODO: Catch errors
    body = '{"success":"true"}'
    res.writeHead(200, 
      { 'Content-Type':'text/html'
      , 'Content-Length':body.length
      })
    res.end(body)
  });

}

And the error I receive:

TypeError: Bad argument
    at Object.stat (fs.js:354:11)
    at Client.putStream (./lib/knox/client.js:181:6)

解决方案

I'm doing something like this:

app.post('/uploadAmazon', function(req, res) {  
var params = req.query;

var request = client.request("PUT", '/' + req.header('x-file-name') + '?partNumber=' + params.partNumber 
        + '&uploadId=' + params.uploadId, {
    'Content-Length' : req.header('Content-Length')
} );

req.on('data', function(data){
    request.write(data);
});


request.on('response', function(response) {
    console.log('Partial ' + params.partNumber + ' statusCode: ' + response.statusCode);
    if (response.statusCode== 200) {
        uploadMap[params.id].currentSize++;
        uploadMap[params.id].completeXmlArray[+(params.partNumber) - 1] = '<Part><PartNumber>' + params.partNumber + '</PartNumber><ETag>' + response.headers.etag + '</ETag></Part>' ; 

        if (uploadMap[params.id].currentSize == uploadMap[params.id].totalSize) {
            uploadMap[params.id].uploadId = params.uploadId;
            completeSend(uploadMap[params.id]);
        }
    }
}).end();

res.end();

});

Assuming that I receive the file name, part number and uploadId from the post.

 
精彩推荐
图片推荐