Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 Graphql将图像上载到s3-createReadStream()';最大调用堆栈大小错误';-以前的所有解决方案都已尝试过_Amazon S3_Graphql_Apollo Server - Fatal编程技术网

Amazon s3 Graphql将图像上载到s3-createReadStream()';最大调用堆栈大小错误';-以前的所有解决方案都已尝试过

Amazon s3 Graphql将图像上载到s3-createReadStream()';最大调用堆栈大小错误';-以前的所有解决方案都已尝试过,amazon-s3,graphql,apollo-server,Amazon S3,Graphql,Apollo Server,我正在为学校做一个项目,并试图将一个图像上传到s3以与graphql一起使用。这似乎是导致以下错误的已知问题 C:\Users\Austin Schroeders\Desktop\ut-bootcamp-coding-class\stock-talk-app\server\node_modules\@apollographql\graphql-upload-8-fork\node_modules\fs-capacitor\lib\index.js:80 open() { Ran

我正在为学校做一个项目,并试图将一个图像上传到s3以与graphql一起使用。这似乎是导致以下错误的已知问题

C:\Users\Austin Schroeders\Desktop\ut-bootcamp-coding-class\stock-talk-app\server\node_modules\@apollographql\graphql-upload-8-fork\node_modules\fs-capacitor\lib\index.js:80
  open() {
      
RangeError: Maximum call stack size exceeded
    at ReadStream.open (C:\Users\Austin Schroeders\Desktop\ut-bootcamp-coding-class\stock-talk-app\server\node_modules\@apollographql\graphql-upload-8-fork\node_modules\fs-capacitor\lib\index.js:80:7)
    at _openReadFs (internal/fs/streams.js:138:12)
    at ReadStream.<anonymous> (internal/fs/streams.js:131:3)
    at ReadStream.deprecated [as open] (internal/util.js:89:15)
    at ReadStream.open (C:\Users\Austin Schroeders\Desktop\ut-bootcamp-coding-class\stock-talk-app\server\node_modules\@apollographql\graphql-upload-8-fork\node_modules\fs-capacitor\lib\index.js:90:11)
    at _openReadFs (internal/fs/streams.js:138:12)
    at ReadStream.<anonymous> (internal/fs/streams.js:131:3)
    at ReadStream.deprecated [as open] (internal/util.js:89:15)
我多次发现的第二个解决方案是将const typeDefs=gql
scaler Upload….
添加到typeDefs的开头,并将
Upload:false
添加到服务器。当我这样做的时候,我会得到一个错误,上面写着“Post body missing”。你忘了使用body解析器中间件了吗?`我考虑过解决这个问题,但显然我已经有了applyMiddleware,它添加了body解析器,所以我发布的代码没有包括scaler上传

我只是在后端工作,下面是相关代码。我去掉了其他有效的查询、突变和授权,只是尝试提供相关代码

server.js

const express = require('express');
const { ApolloServer } = require('apollo-server-express');
const { typeDefs, resolvers } = require('./schemas');
const db = require('./config/connection');
const PORT = process.env.PORT || 3001;
const app = express();
const server = new ApolloServer({
  typeDefs,
  resolvers
});

server.applyMiddleware({ app });

app.use(express.urlencoded({ extended: false }));
app.use(express.json());

db.once('open', () => {
  app.listen(PORT, () => {
    console.log(`API server running on port ${PORT}!`);
    console.log(`Use GraphQL at http://localhost:${PORT}${server.graphqlPath}`);
  });
});
typeDefs.js

const { gql } = require('apollo-server-express');

const typeDefs = gql`
  type S3Object {
    eTag: String
    location: String
    key: String
    bucket: String
  }

  type Mutation {
    uploadFile(file: Upload!): S3Object
  }
`;
module.exports = typeDefs;
resolver.js

const { AuthenticationError, ApolloError } = require('apollo-server-express');
const AWS = require('aws-sdk');
const { v4: uuidv4 } = require('uuid');
require('dotenv').config();

AWS.config.update({
    accessKeyId: process.env.AWS_ACCESS_ID,
    secretAccessKey: process.env.AWS_SECRET_KEY,
    region: process.env.AWS_REGION,
    bucket: process.env.AWS_S3_BUCKET_NAME
});

const s3 = new AWS.S3({ region: process.env.AWS_REGION });

const s3DefaultParams = {
    ACL: 'public-read',
    Bucket: process.env.AWS_S3_BUCKET_NAME,
    Conditions: [
        ['content-length-range', 0, 256000] // 256k Kb
    ],
};

const handleFileUpload = async file => {
    const { createReadStream, filename } = await file;
    const key = uuidv4();

    return new Promise((resolve, reject) => {
        debugger;
        s3.upload(
            {
                ...s3DefaultParams,
                // Body: "this is body test",
                Body: createReadStream(),
                Key: `${key}/${filename}`,
            },
            (err, data) => {
                if (err) {
                    console.log('error uploading...', err);
                    reject(err);
                } else {
                    console.log('successfully uploaded file...', data);
                    resolve(data);
                }
            },
        );
    });
};

const resolvers = {
    Mutation: {
        uploadFile: async (parent, { file }, context) => {
                const response = await handleFileUpload(file);
                console.log("this is response line 156" + JSON.stringify(response));
                var newFile = JSON.stringify(response);
                console.log("this is newFile" + newFile);
                var parsedFile = JSON.parse(newFile);
                console.log("this is parsedFile Location " + parsedFile.Location);
                // return parsedFile.Location;
                return parsedFile;
                // return response;
        }
    }
};

module.exports = resolvers;
package.json

{
  "name": "mern-server",
  "version": "1.0.0",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "watch": "nodemon",
    "seed": "node seeders/seeds.js",
    "preinstall": "npm i npm-force-resolutions"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "apollo-server-express": "^2.24.1",
    "aws-sdk": "^2.919.0",
    "bcrypt": "^4.0.1",
    "dotenv": "^10.0.0",
    "express": "^4.17.1",
    "faker": "^4.1.0",
    "fs-capacitor": "^6.2.0",
    "graphql": "^15.5.0",
    "graphql-upload": "^12.0.0",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^5.9.9",
    "npm-force-resolutions": "0.0.10",
    "uuid": "^8.3.2"
  },
  "resolutions": {
    "fs-capacitor": "^6.2.0",
    "graphql-upload": "^12.0.0"
  },
  "devDependencies": {
    "nodemon": "^2.0.3"
  }
}
我认为这应该是一切相关的,并感谢任何可以提供的帮助

{
  "name": "mern-server",
  "version": "1.0.0",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "watch": "nodemon",
    "seed": "node seeders/seeds.js",
    "preinstall": "npm i npm-force-resolutions"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "apollo-server-express": "^2.24.1",
    "aws-sdk": "^2.919.0",
    "bcrypt": "^4.0.1",
    "dotenv": "^10.0.0",
    "express": "^4.17.1",
    "faker": "^4.1.0",
    "fs-capacitor": "^6.2.0",
    "graphql": "^15.5.0",
    "graphql-upload": "^12.0.0",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^5.9.9",
    "npm-force-resolutions": "0.0.10",
    "uuid": "^8.3.2"
  },
  "resolutions": {
    "fs-capacitor": "^6.2.0",
    "graphql-upload": "^12.0.0"
  },
  "devDependencies": {
    "nodemon": "^2.0.3"
  }
}