使用Axios和Form-data在Google Cloud Storage中像本地文件一样上传文件

时间:2019-02-11 11:40:59

标签: node.js stream google-cloud-storage

我正在使用axiosform-data npm软件包上载本地文件。

这是基本的代码结构:

char *

我想对Google Cloud Storage中的文件执行相同的操作。换句话说,与其将文件从云存储下载到本地目的地,然后使用const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); async function upload() { var path_str = '/path/to/file.pdf'; var form_obj = new FormData(); form_obj.append('my_file', fs.createReadStream(path_str)); var req_obj = {}; req_obj['url'] = 'https://post-url'; req_obj['method'] = 'post'; req_obj['data'] = form_obj; return await axios(req_obj); } 来访问它,我更希望在文件位于文件中时对其进行fs.createReadStream的等效操作。云存储。

在Google Cloud Storage npm软件包中,fs.createReadStream有一个名为createReadStream的方法,但是当我将其插入代码中时,该方法不起作用。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

根据您指出的方法createReadStream

  

创建可读流以读取远程文件的内容。它可以通过管道传输到可写流,也可以收听“数据”事件以读取文件的内容

我了解到您对以粗体显示的文本感兴趣。这是一个如何做的例子。此代码读取文件内容,而不必将其下载到本地系统。数据对象是Buffer的实例,它取决于您如何处理它。

const {Storage} = require('@google-cloud/storage');
const fs = require('fs');

const storage = new Storage();

const bucket = storage.bucket('yourBucketName');
const remoteFile = bucket.file('yourFileName')

remoteFile.createReadStream()
    .on('error', function(err) {})
    .on('response', function(response) {
        console.log('Server connected and responded with the specified status and headers.')
     })
    .on('data', function(data) {
        console.log(data)
        console.log(data.toString())
     })
    .on('end', function() {
        console.log('End')
     })