[英]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.