Apollo-link-rest: apollo-link-restを使用してファイルオブジェクトを送信することは可能ですか?

作成日 2019年11月11日  ·  5コメント  ·  ソース: apollographql/apollo-link-rest

クエリの例:

  mutation register {
    register(
      input: {
        email: $email
        avatar: $avatar
        password: $password
      }
    ) @rest(type: "Register", path: "auth/register", method: "POST")
  }

フォームには、Fileオブジェクトを送信するファイル入力があります(これはアバタープロパティです)。 アバター変数をログに記録すると、このプロパティが定義されていることがわかりますが、apollo-link-restを使用してデータを送信すると、ファイルオブジェクトは空になります。

ミューテーションを送信する前に変数をログに記録します。
image

apolloを介してサーバーにデータを送信する場合、オブジェクトは空です。

image

ドキュメントにファイルのアップロードについての言及が見つからなかったので、それが可能かどうかはわかりません。

help wanted 🛠 question❔

全てのコメント5件

Fileオブジェクトのマングリングに関連するいくつかのバグを修正する必要があったため、これは可能だと思います。

そうは言っても、react-nativeでApollo-link-restを使用しているため、最近はこれを使用していません。

これをデバッグし、なぜ機能しないのかを理解するには、ソースを一読する必要があるかもしれません。 実際の修正は、Apollo-link-restではなくApollo-clientにある可能性があります。

返信いただきありがとうございます! 私は主に、有効にする必要のある設定や、追加する必要のあるリンクなど、明らかな何かが欠落していないことを確認したかった:slightly_smiling_face:

たとえば、通常のapolloでファイルをアップロードするには、apollo-upload-client(https://github.com/jaydenseric/apollo-upload-client)が必要であると言う人がいます。

同様のリンクをapollo-link-restのクライアントに追加する必要があるかどうかわかりませんか?

いいえ、それはここでは当てはまりません。

つい最近7月に、誰かがapollo-link-restを使用したreactファイルのアップロードの例を投稿しました。

多分これは役立ちますか?

https://github.com/apollographql/apollo-link-rest/issues/200#issuecomment -509287597

あなたがそれを理解したなら、多分私たちはこれを行う方法についてのドキュメントセクションを書くべきです!

どうもありがとう@fbartho!

その問題は問題の解決に役立ちました。私がしなければならなかった重要な変更は、ファイルエンコードメソッドをbodySerializers追加すること

bodySerializers: {
    fileEncode: (data: any, headers: Headers) => {
      const formData = new FormData()
      formData.append('file', data, data.name)
      headers.set('Accept', '*/*')
      return { body: formData, headers }
    }
  }

また、クエリでシリアライザーを指定する部分もあります

@rest(
        type: "File"
        path: "YOUR_API_URL"
        method: "POST"
        bodySerializer: "fileEncode"
      ) {

このようなものがドキュメントにあると非常に役立ちます。 再度、感謝します!

このページは役に立ちましたか?
0 / 5 - 0 評価