在 React 中使用 fs 和 aws-sdk

Using fs and aws-sdk in React

我在将文件从 HTML 加载到 AWS s3 时遇到问题。我已经用 node.js 运行 这个脚本手动测试了这个,使用硬编码值,它可以工作。虽然我在 REACT 中实现这个有困难,因为有这个错误:

TypeError: fs__WEBPACK_IMPORTED_MODULE_0___default.a.readFileSync is not a function

我相信我的代码很简单:

HTML 是:

 <div className="single-file-input">
            <input
              type="file"
              id="user_image"
              name="user_image"
              onChange={this.handleFiles}
            />
            <div>
              Upload a picture<i className="fa fa-upload"></i>
            </div>
          </div>

那么js函数如下:

handleFiles = (e) => {
uploadFile(e.target.files);

};

我正在从 utils 文件 import { uploadFile } from "../../../utils/upload"; 导入此函数,它看起来像:

import fs from "fs";
import AWS from "aws-sdk";

/*const fs = require("fs");
const AWS = require("aws-sdk");*/

//The Below Three are defined, not adding them here of course. 
const ID = "";
const SECRET = "";
const BUCKET_NAME = "";

const s3 = new AWS.S3({
  accessKeyId: ID,
  secretAccessKey: SECRET,
  Bucket: BUCKET_NAME,
  CreateBucketConfiguration: {
    // Set your region here
    LocationConstraint: "eu-west-1",
  },
});

export const uploadFile = (fileName) => {
  // Read content from the file
  const fileContent = fs.readFileSync(fileName[0].name);

  // Setting up S3 upload parameters
  const params = {
    Bucket: BUCKET_NAME,
    Key: "TESTFILE.jpg", // File name you want to save as in S3
    Body: fileContent,
  };

  // Uploading files to the bucket
  s3.upload(params, function (err, data) {
    if (err) {
      throw err;
    }
    //Data location is used in order to get the data location in AWS S3
    console.log(`File uploaded successfully. ${data.Location}`);
  });
};

我需要使用 API 吗,或者我在流程中不理解什么,我认为既然脚本是独立的,它应该在这里也能工作,但事实并非如此。

我错过了什么?

P.s。也许有人也会使用此代码:)

'fs'是NodeJS核心模块,不能在React中使用。 React 在浏览器中 运行,它们没有直接 API 访问文件系统,不像 Node.

对于 React,使用 react-aws-s3

可能会取得更大的成功