Загрузите файл в Google Cloud Storage как локальный файл, используя Axios и Form-data - PullRequest
0 голосов
/ 11 февраля 2019

Я использую пакеты axios и form-data npm для загрузки локального файла.

Вот основная структура кода:

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);
}

Я хотел бы сделать то же самое для файла в Google Cloud Storage.Другими словами, вместо загрузки файла из облачного хранилища в локальное место назначения и последующего использования fs.createReadStream для доступа к нему я бы предпочел сделать эквивалент fs.createReadStream для файла, пока он находится в облачном хранилище.

В пакете npm для облачного хранилища Google File имеет метод с именем createReadStream , но он не сработал, когда я подключил его к своему коду.

Есть лиспособ достичь этого?

1 Ответ

0 голосов
/ 11 февраля 2019

Из метода createReadStream , который вы указали:

Создайте читаемый поток для чтения содержимого удаленного файла.Он может быть передан в записываемый поток или для прослушивания событий 'data' для чтения содержимого файла .

Я понимаю, что вас интересует текст, выделенный жирным шрифтом.Вот пример того, как это сделать.Этот код читает содержимое файла без необходимости загружать его в вашу локальную систему.Объект данных является экземпляром 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')
     })
...