簡體   English   中英

使用nodejs將文件上傳到s3

[英]upload file to s3 using nodejs

我編寫了一個使用aws-sdk將文件上傳到 s3 的函數,但我遇到了問題。

當我用Body Body: "test"替換Body ,該函數將成功執行,我可以在s3看到內容test

但是我想上傳一個文檔,比如pdf文件,它無法運行並拋出一個錯誤:

UnhandledPromiseRejectionWarning:TypeError [ERR_INVALID_ARG_TYPE]:“path”參數必須是字符串、緩沖區或 URL 類型之一。 在 Object.open (fs.js:406:3) at ReadStream.open (internal/fs/streams.js:110:12) at new ReadStream (internal/fs/streams.js:99:10) 處收到類型對象Object.createReadStream (fs.js:1725:10)

這是我的代碼:

import { createWriteStream, createReadStream } from "fs";
import AWS from 'aws-sdk';
const fs = require('fs');


const uploadS3 = async ({file}) => {
  const { stream, filename} = file;
  AWS.config.update({
    accessKeyId: '*******',
    secretAccessKey: '********',
    region: 'us-east-1' 
  });

  let params = {
    Bucket: "test-files-staging",
    Key: 'documents/' + filename,
    Body: fs.createReadStream(file),
    ACL: 'public-read'
  };
  await new AWS.S3().putObject(params).promise().then(() => {
    console.log('Success!!!')
  }).catch((err) => { console.log(`Error: ${err}`) })
}

提前致謝。

嗯,錯誤很明顯: path參數需要是字符串、緩沖區或 URL,但是你傳入一個對象,它是由 fs.createReadStream 創建的 readStream。

相反,使用fs.readFileSync函數將您的文件讀入緩沖區(如果您使用 async fs.readFile您將得到一個fs.readFile這又不是字符串、緩沖區或 URL,並且會再次失敗):

let params = {
    Bucket: "test-files-staging",
    Key: 'documents/' + filename,
    Body: fs.readFileSync(filename), // assuming filename is the full path to your object
    ACL: 'public-read'
  };

關於fs函數的更多信息可以在文檔中找到 - 這里

暫無
暫無

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

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