小编dio*_*lla的帖子

使用okhttp上传文件

我正在完成这个使用okhttp与web服务进行通信的项目.

对于常规GET和POST,一切正常,但我无法正确上传文件.

okhttp文档非常缺乏这些主题,我在这里或任何地方找到的所有东西似乎都不适用于我的情况.

它应该很简单:我必须发送文件和一些字符串值.但我无法弄清楚如何做到这一点.

根据我发现的一些样本,我首先尝试了这个:

RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
    .addFormDataPart("group", getGroup())
    .addFormDataPart("type", getType())
    .addFormDataPart("entity", Integer.toString(getEntity()))
    .addFormDataPart("reference", Integer.toString(getReference()))
    .addPart(Headers.of("Content-Disposition", "form-data; name=\"task_file\""), RequestBody.create(MediaType.parse("image/png"), getFile()))
    .build();
Run Code Online (Sandbox Code Playgroud)

它给了我一个"400错误请求"错误.

所以我从okhttp食谱中尝试了这个:

RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
    .addPart(Headers.of("Content-Disposition", "form-data; name=\"group\""), RequestBody.create(null, getGroup()))
    .addPart(Headers.of("Content-Disposition", "form-data; name=\"type\""), RequestBody.create(null, getType()))
    .addPart(Headers.of("Content-Disposition", "form-data; name=\"entity\""), RequestBody.create(null, Integer.toString(getEntity())))
    .addPart(Headers.of("Content-Disposition", "form-data; name=\"reference\""), RequestBody.create(null, Integer.toString(getReference())))
    .addPart(Headers.of("Content-Disposition", "form-data; name=\"task_file\""), RequestBody.create(MediaType.parse("image/png"), getFile()))
    .build();
Run Code Online (Sandbox Code Playgroud)

结果相同.

不知道还有什么可以尝试或调查这个调查.

请求使用以下代码完成:

// adds the required authentication token
Request request = new Request.Builder().url(getURL()).addHeader("X-Auth-Token", getUser().getToken().toString()).post(requestBody).build();
Response response = client.newCall(request).execute();
Run Code Online (Sandbox Code Playgroud)

但我很确定问题是如何构建请求体.

我究竟做错了什么?

编辑:顺便说一句,上面的"getFile()"返回一个File对象.其余参数都是字符串和整数.

java android okhttp

8
推荐指数
2
解决办法
1万
查看次数

Apollo graphql:makeExecutableSchema 和游乐场

我是一个初学者,尝试使用 apollo-express 和 prisma 设置 graphql API

一切都很顺利,但我决定使用这个库来添加输入验证: graphql-constraint-directive

它要求我使用 makeExecutableSchema 来构建我的架构,以便我可以使用schemaDirectives参数

我启动服务器的代码是这样的:

const server = new ApolloServer({
    typeDefs,
    resolvers,
    context: ({req}) => {
        const userId = getUserID(req);

        return {
            userId,
            prisma
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

一切都很顺利

但为了使用该库,我将其重构如下:

const schema = makeExecutableSchema({
    typeDefs,
    resolvers,
    schemaDirectives: {constraint: ConstraintDirective}
});
const server = new ApolloServer({
    schema,
    context: ({req}) => {
        const userId = getUserID(req);

        return {
            userId,
            prisma
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

它也有效,我所有的查询和突变都有效,验证也有效。

但它破坏了 graphql-playground:它不再能够加载我的架构和文档,两个选项卡都是空的。它显示以下错误: 无法访问服务器

它仍然有效:我能够发送我的查询和突变等,但我不再有代码完成和自动文档,因为它知道我的模式,因此不再有用

如果我替换纯 typeDefs 和解析器的可执行模式,那么它会再次正常工作,playground 会再次加载所有内容

使用 …

graphql apollo-server prisma

2
推荐指数
1
解决办法
2565
查看次数

标签 统计

android ×1

apollo-server ×1

graphql ×1

java ×1

okhttp ×1

prisma ×1