アポロサーバは、ローカルストレージとAWS S 3上でファイルアップロードを表します
5705 ワード
概要:ファイルを1つのストレージから別のファイルにアップロードします.エクスプレス、アポロサーバエクスプレス、AWS SDKを使用します.
ファイルのアップロードは、Webアプリケーションの基本です.そして、初心者と中間のためにアポロServer急行を使用しているファイルアップロードの詳細に関する多くの情報がありません.だから、誰もがこの投稿を読んで、いくつかのコードを理解していない場合は、コメントを無料で感じてください、私はできるだけ早く更新されます.さて、コードを書きましょう.
初期化
オープン
あなたならば
今あなたのAWS
3 .js
ディレクトリ名
typedefs.js
あなたは私のgithub repoで上記のコードを見つけることができます:
https://github.com/kingmaker9841/apollo-multiple-upload
良い一日を!
ファイルのアップロードは、Webアプリケーションの基本です.そして、初心者と中間のためにアポロServer急行を使用しているファイルアップロードの詳細に関する多くの情報がありません.だから、誰もがこの投稿を読んで、いくつかのコードを理解していない場合は、コメントを無料で感じてください、私はできるだけ早く更新されます.さて、コードを書きましょう.
初期化
package.json
使用しているワーキングディレクトリでnpm init -y
それではモジュールをインストールしましょう.npm install express apollo-server-express dotenv nodemon uuid aws-sdk
モジュールのいくつかに精通していない場合は、モジュール名をgoogleにでき、そのドキュメントから学ぶことができます.オープン
package.json
以下のように変更します."main": "app.js",
"scripts": {
"start": "node app.js",
"dev": "nodemon app.js"
}
ご覧の通り.app.js
私のサーバーファイルですが、あなたが欲しいものに名前を変更することができます.あなたならば
main:
プロパティはapp.js
それからファイル名をapp.js
あなたの働くディレクトリで.ファイルを作成する.env
環境変数を格納するには.現在app.js
, 次のコードをペーストしますconst express = require('express');
const app = express();
const {ApolloServer} = require('apollo-server-express');
require('dotenv').config();
let server = new ApolloServer({
typeDefs, resolvers
});
server.applyMiddleware({app});
let PORT = process.env.PORT || 5000;
app.listen(PORT, ()=>{
console.log(`Server started on ${PORT}...`);
})
これは私たちのサーバーを取得し、ポート5000で実行されます.今あなたのAWS
accesskeyid
, secretaccesskey
, region
and bucket-name
. 次に、config
そしてファイルの中にs3.js
次のコードをコピーします.3 .js
const aws = require('aws-sdk');
let s3 = new aws.S3({
credentials: {
accessKeyId: process.env.ACCESS_KEY_ID,
secretAccessKey: process.env.SECRET_ACCESS_KEY
},
region: process.env.REGION,
params : {
ACL : 'public-read',
Bucket : process.env.AWS_BUCKET
}
});
module.exports = s3
ここでは、すべての環境変数は.env
ファイル.ディレクトリ名
schema
と2つのファイルを作成するtypedefs.js
and resolvers.js
次のコードをペーストします.typedefs.js
const {gql} = require('apollo-server-express')
const typedefs = gql`
type Query {
uploadedFiles : [File]
}
type Mutation {
singleUploadLocal (file: Upload!) : File
multipleUploadLocal (files: [Upload]!) : [File]
singleUploadS3 (file : Upload!) : File
multipleUploadS3 (files : [Upload]!) : [File]
}
type File {
success : String!
message : String!
mimetype : String
encoding : String
filename : String
location : String
}
`;
module.exports = typedefs;
リゾルバjsconst fs = require('fs');
const {v4: uuid} = require('uuid');
const s3 = require('../config/s3');
const processUpload = async (file)=>{
const {createReadStream, mimetype, encoding, filename} = await file;
let path = "uploads/" + uuid() + filename;
let stream = createReadStream();
return new Promise((resolve,reject)=>{
stream
.pipe(fs.createWriteStream(path))
.on("finish", ()=>{
resolve({
success: true,
message: "Successfully Uploaded",
mimetype, filename, encoding, location: path
})
})
.on("error", (err)=>{
console.log("Error Event Emitted")
reject({
success: false,
message: "Failed"
})
})
})
}
let processUploadS3 = async (file)=>{
const {createReadStream, mimetype, encoding, filename} = await file;
let stream = createReadStream();
const {Location} = await s3.upload({
Body: stream,
Key: `${uuid()}${filename}`,
ContentType: mimetype
}).promise();
return new Promise((resolve,reject)=>{
if (Location){
resolve({
success: true, message: "Uploaded", mimetype,filename,
location: Location, encoding
})
}else {
reject({
success: false, message: "Failed"
})
}
})
}
const resolvers = {
Mutation: {
singleUploadLocal : async (_, args)=>{
return processUpload(args.file);
},
multipleUploadLocal : async (_, args) =>{
let obj = (await Promise.all(args.files)).map(processUpload);
console.log(obj);
return obj;
},
singleUploadS3 : async (_, args)=>{
return processUploadS3(args.file);
},
multipleUploadS3 : async (_, args)=>{
let obj = (await Promise.all(args.files)).map(processUploadS3);
return obj;
}
}
}
module.exports = resolvers;
今テストするために、私はクロム拡張子を使用していますAltair
これにより、以下のように私のGraphSQLクエリのファイルを簡単にアップロードできます.あなたは私のgithub repoで上記のコードを見つけることができます:
https://github.com/kingmaker9841/apollo-multiple-upload
良い一日を!
Reference
この問題について(アポロサーバは、ローカルストレージとAWS S 3上でファイルアップロードを表します), 我々は、より多くの情報をここで見つけました
https://dev.to/kingmaker9841/apollo-server-express-file-upload-on-local-storage-and-on-aws-s3-1km8
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(アポロサーバは、ローカルストレージとAWS S 3上でファイルアップロードを表します), 我々は、より多くの情報をここで見つけました https://dev.to/kingmaker9841/apollo-server-express-file-upload-on-local-storage-and-on-aws-s3-1km8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol