使用OkHttp上传图片时文件附加头尾数据致无法识别的求助
问题原因
你使用MultipartBody.FORM构建请求体,这是多部分表单上传的格式。OkHttp会自动为表单中的文件字段添加Content-Disposition、Content-Type等分隔头信息,这些额外内容会被写入到上传的文件中,导致文件不再是纯二进制的图片数据,因此系统提示“File not supported”。
解决方案
如果服务器期望接收纯图片二进制数据(而非表单格式),直接将文件作为请求体提交即可,无需使用MultipartBody:
// 根据实际图片类型指定MediaType,比如image/jpeg、image/png RequestBody requestBody = RequestBody.create(file, MediaType.parse("image/jpeg")); OkHttpClient client = new OkHttpClient().newBuilder().proxy(proxy).build(); Request req = new Request.Builder() .url(URL) .post(requestBody) .addHeader("X-Auth", Auth) // 可选:根据服务器要求添加Content-Type头 .addHeader("Content-Type", "image/jpeg") .build(); // 注意修正原代码中的拼写错误:buid() → build() Response res = client.newCall(req).execute();
补充说明
如果服务器明确要求通过表单字段接收文件,那问题出在服务器端:服务器需要正确解析Multipart请求,提取出文件的二进制数据后再保存,而不是直接存储整个请求体。但根据你描述的上传后文件包含额外头信息的情况,显然服务器是直接存储了请求体内容,因此优先采用上述直接上传二进制的方案。
内容的提问来源于stack exchange,提问作者Nilesh K
相关产品推荐
相关产品推荐

