2017-08-11 23 views
2

Base64文字列をアップロードしていますが、GraphQLがハングアップしています。文字列を50,000文字未満にスライスすると、それは機能します。 50,000文字後、graphQLは決してresolve関数にはなりませんが、エラーは発生しません。小さな文字列では、うまく動作します。GraphQLを使用してAWS S3に画像をアップロードするにはどうすればよいですか?

const file = e.target.files[0]; 
const reader = new FileReader(); 
reader.readAsDataURL(file); 
reader.onloadend =() => { 
    const imageArray = reader.result; 
    this.context.fetch('/graphql', { 
    body: JSON.stringify({ 
     query: `mutation s3Upload($img: String!) { 
     s3Upload(file: $img) { 
      logo, 
     } 
     }`, 
     variables: { 
     img: imageArray, 
     }, 
    }), 
    }).then(response => response.json()) 
    .then(({ data }) => { 
    console.log(data); 
    }); 
} 

const s3Upload = { 
    type: S3Type, 
    args: { 
     file: { type: new NonNull(StringType) }, 
    }, 
    resolve: (root, args, { user }) => upload(root, args, user), 
}; 

const S3Type = new ObjectType({ 
    name: 'S3', 
    fields: { 
    logo: { type: StringType }, 
    }, 
}); 

答えて

1

AWS AppSync(https://aws.amazon.com/appsync/)あなたはS3オブジェクトや入力のための型を持つことができる「複合オブジェクト」として知られている機能でこれを提供します。

type S3Object { 
    bucket: String! 
    key: String! 
    region: String! 
} 

input S3ObjectInput { 
    bucket: String! 
    key: String! 
    region: String! 
    localUri: String 
    mimeType: String 
} 

あなたは、このような何かを行うことができます別のタイプの一環として、このオブジェクトを定義します

type UserProfile { 
    id: ID! 
    name: String 
    file: S3Object 
} 

し、それを追加するための変異指定:

type Mutation { 
    addUser(id: ID! name: String file: S3ObjectInput): UserProfile! 
} 

あなたのクライアント操作が適切なバケットを指定する必要があり、キーなど、地域、ここ

詳細(ファイル拡張子):

+0

https://docs.aws.amazon.com/appsync/latest/devguide/building-a-client-app-react.html#complex-objectsはあなたに@Richardをありがとうございます。参照したチュートリアルでは、 'NewPostMutation.js'の変更方法は示されていません。私はこのチュートリアルに従おうとしましたが、これまでにs3 :-(にアップロードするファイルを作ることはできません – SaidAkh

関連する問題