您好,有没有办法通过apollo2angular和graphql获取pdf文档?

您好,有没有办法通过apollo2angular和graphql获取pdf文档?,graphql,apollo-server,Graphql,Apollo Server,以下是回复信息: %PDF-1.4\n%����\n2 0对象\n流\nx��X�s�F\u0010�\u0019����$\u0010JaF\u000f\t\t�*:信息战�:�H������-ڀg/}]�yk��Z\u0002��0Vڈ��&��\N��ɐֳ�L\u0012?�4\u000bi���\u001b�D\u0017\tPقYl���\u0019p\u0010:\-g���Oǜ�F�\u0019�L�&�_c6�'\u0016��个人简历���fhm�ҏ?;�ǴK�U��d\u00

以下是回复信息:

%PDF-1.4\n%����\n2 0对象\n流\nx��X�s�F\u0010�\u0019����$\u0010JaF\u000f\t\t�*:信息战�:�H������-ڀg/}]�yk��Z\u0002��0Vڈ��&��\N��ɐֳ�L\u0012?�4\u000bi���\u001b�D\u0017\tPقYl���\u0019p\u0010:\-g���Oǜ�F�\u0019�L�&�_c6�'\u0016��个人简历���fhm�ҏ?;�ǴK�U��d\u0007�!����qG{,k�M��\u001e۬�)-�E�古¢\u0019�\u0003(�����q2R�\u001c%K�风险投资���[�;�j\u0004�E�人事军官�嗯��dk\u0011\fN����騈���\u000fs=8���9\u001fY�\u00185t\u001d��A0Sa��!\u000e��i\u000f�(1R)�Q����>�\u0017�我��\u0017�\u0018H*�R�1 7��~ch\u001a�CUfQ�J�9��+��K��Џ�\u001a{�G��)\F�D\u0012\f���(C\u0005)��?ݗ��M�������C��0Ϩ�v@*@Hp�\u0019�Y�!��7.�-�\u001b�A.�W�3.��&�T0q=�K�-ؚ�\u0018\u000e�)���]N�P\u0019ZB。�$w\u0015�\u0006n�&六,|


嘿,是的,有,但需要一点定制工作

下面是如何使用它的,但您也可以将其扩展到自己的实现中

基本上,您将文件附加到多部分/表单数据请求的根级别,然后从GraphQL变量中的输入指向请求中文件的键。下面是一些代码,说明如何使用文件就绪的网络接口改装和更新客户端实例,然后将其输入Angular2阿波罗

import { createNetworkInterface } from 'apollo-client';

// Create a file-ready ApolloClient instance.
export function makeClientApolloFileHandler() {
  const graphqlUrl = `https://scaphold.io/graphql/my-app`;
  const networkInterface = createNetworkInterface(graphqlUrl);
  networkInterface.query = (request) => {
    const formData = new FormData();

    // Parse out the file and append at root level of form data.
    const varDefs = request.query.definitions[0].variableDefinitions;
    let vars = [];
    if (varDefs && varDefs.length) {
      vars = varDefs.map(def => def.variable.name.value);
    }
    const activeVars = vars.map(v => request.variables[v]);
    const fname = find(activeVars, 'blobFieldName');
    if (fname) {
      const blobFieldName = fname.blobFieldName;
      formData.append(blobFieldName, request.variables[blobFieldName]);
    }

    formData.append('query', printGraphQL(request.query));
    formData.append('variables', JSON.stringify(request.variables || {}));
    formData.append('operationName', JSON.stringify(request.operationName || ''));

    const headers = { Accept: '*/*' };
    if (localStorage.getItem('scaphold_user_token')) {
      headers.Authorization = `Bearer ${localStorage.getItem('scaphold_user_token')}`;
    }

    return fetch(graphqlUrl, {
      headers,
      body: formData,
      method: 'POST',
    }).then(result => result.json());
  };

  const clientFileGraphql = new ApolloClient({
    networkInterface,
    initialState: {},
  });
  return clientFileGraphql;
}
此函数处理请求后,您可能会得到如下格式的FormData(如果它是用JSON编码的):

{
“查询”:“创建文件($input:CreateFileInput){CreateFile(input:$input){…}”,
“变量”:{
“输入”:{
“blobFieldName”:“myFile”,
“名称”:“我的文件名!”
}
},
//注意blobFieldName如何指向该键
“myFile”:
}
然后,服务器需要了解如何解释这个,以便在有效负载中查找文件并将其与正确的对象相关联,等等

希望这有帮助

{
  "query": "mutation CreateFile($input:CreateFileInput) { createFile(input: $input) { ... }",
  "variables": {
    "input": {
      "blobFieldName": "myFile",
      "name": "MyFileName!"
    }
  },
  // Note how the blobFieldName points to this key
  "myFile": <Buffer of file data in multipart/form-data>
}