如何使用put方法使用缓冲区数组写入文件?

时间:2019-01-16 07:22:38

标签: javascript node.js stream buffer

有什么方法可以使用缓冲区数组和内容类型以及put方法写入文件?

requestify.request('some url', {
                    method: 'PUT',
                    body: buffArray, //need modifications here
                    headers: {
                        'Content-Type': res_file.headers['content-type']
                    }
                }).then(function (res) {
                    console.log(res);
                })

我可以发送数据,但文件无法以正确的方式存储。

有效的Java代码

   httpcon.setRequestMethod("PUT");
        httpcon.setReadTimeout(100000);
        httpcon.setDoOutput(true);
        httpcon.setRequestProperty("Content-Type", conenttype);
        httpcon.connect();
        OutputStream os = httpcon.getOutputStream();

        os.write(in.toByteArray(), 0, in.size());

        responceCode = httpcon.getResponseCode();

        httpcon.disconnect();

1 个答案:

答案 0 :(得分:0)

我个人的建议是使用Node.JS内置的httphttps包。

为什么?因为您要编写和读取可能足够大的二进制文件,从而给您带来问题,并且对于我用requestify测试的文件,使用二进制响应时,它会给您带来问题(它将它们字符串化!)。

您可以简单地使用流媒体,这将为您节省很多麻烦。

您可以使用它进行测试,例如:

const fs = require('fs');
const http = require('https');

const req = http.request({
  host: 'raw.githubusercontent.com',
  path: '/smooth-code/svgr/master/resources/svgr-logo.png',
  method: 'GET'
}, res => {
  res.pipe(fs.createWriteStream('test.png'));
});
req.end();

并适应您提供的代码:

const fs = require('fs');
const http = require('https');

const req = http.request({
  host: 'some-host',
  path: '/some/path',
  method: 'PUT',
  headers: {
    'Content-Type': res_file.headers['content-type']
  }
}, res => {
  res.pipe(fs.createWriteStream('your-output-file.blob'));
});
// This part: If comes from HDD or from another request, I would recommend using .pipe also
req.write(buffArray);
req.end();

更多信息:

http软件包https://nodejs.org/api/http.html

fs软件包https://nodejs.org/api/fs.html