簡體   English   中英

創建上傳文件到谷歌雲存儲

[英]Create an upload file to google cloud storage

我正在嘗試生成文件並將其上傳到谷歌雲存儲。 在本地生成文檔並將其上傳到存儲一切正常。 但是一旦部署了服務,我就會收到錯誤消息:

{
  "code": 500,
  "reason": "Unknow exception",
  "message": "Error: write EPIPE",
  "referenceError": "https://docs.nestjs.com/exception-filters",
  "exceptionText": {
    "errno": "EPIPE",
    "code": "EPIPE",
    "syscall": "write"
  }
}

我目前創建文檔的方法是:

const storage =
      ENDPOINTS.GOOGLE_STORAGE_BUCKET_KEY != ''
        ? new Storage({
            keyFilename: 'myfile.json',
          })
        : new Storage();

const content = '<h1>Hello world!</h1>';

    const myBucket = storage.bucket(ENDPOINTS.STORAGE_BUCKET);
    const file = myBucket.file(filename);
    file.metadata = { contentType: 'application/pdf' };

    await pdf.create(content).toBuffer(async (err, buffer) => {
      //destination: `D2C_D2D_ACTIVITY_SVC/drop_permission/${filename}`,
      console.log(buffer);
      await myBucket
        .file(`path/${filename}`)
        .save(buffer, {
          public: true,
          gzip: true,
          resumable: false,
          validation: false,
          metadata: {
            cacheControl: 'no-cache',
          },
        });

    });

不知道為什么在部署服務后不起作用,我沒有找到任何正確的線索來解決它。 有人能幫我嗎?

我更喜歡使用 MulterGoogleStorage 來處理 google-storage:

import { Body, Controller, Post, UploadedFiles, UseInterceptors } from '@nestjs/common';
import { FilesInterceptor } from '@nestjs/platform-express';

import * as path from 'path';
import  MulterGoogleStorage  from 'multer-google-storage';

@Controller()
export class AppController {
  constructor() {}

  @Post()
  @UseInterceptors(FilesInterceptor('file', null, {
    storage: new MulterGoogleStorage({
      projectId: 'your project id',
      keyFilename: path.join(__dirname, '../myfile.json'),
      bucket: ENDPOINTS.STORAGE_BUCKET,
      filename: (req, file, cb) => {
        const fileNameSplit = file.originalname.split('.');
        const fileExt = fileNameSplit.pop();
        cb(null, `${Date.now()}.${fileExt}`);
      }
    })
  }))
  async save(@UploadedFiles() file, @Body() body: any): Promise<any> {
    console.log(file);
    return;
  }
}

需要安裝“@types/multer”和“multer-google-storage”

由於您無法在本地創建文件,因此您也可以使用 Stream 上傳它。 嘗試使用以下代碼:

const myBucket = storage.bucket(ENDPOINTS.STORAGE_BUCKET);
let pdfStream = pdf.create(content).toStream();
let remoteWriteStream = bucket.file(`path/${filename}`).createWriteStream({ 
    metadata : { 
        contentType : 'application/json' 
    }
});
pdfStream.pipe(remoteWriteStream)
    .on('error', err => {
        return callback(err);      
    })
    .on('finish', () => {
        return callback();
});

讓我知道這個是否奏效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM