当前位置: 首页 > 知识库问答 >
问题:

改造2:上传图片到服务器,得到奇怪的回应

上官和惬
2023-03-14
@POST("/vistek/myservice.php")
    Call<String> send(@Part("myFile") RequestBody file);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
  HttpLoggingInterceptor interceptor2 = new HttpLoggingInterceptor();
  interceptor2.setLevel(HttpLoggingInterceptor.Level.HEADERS);

  HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
  interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

  httpClient.addInterceptor(interceptor);
  httpClient.addInterceptor(interceptor2);

以及我向服务器发送图像的函数:

public void sendImage(byte[] data)
    {
        MediaType MEDIA_TYPE_JPEG = MediaType.parse("image/jpeg");
        FileUploadService service = ServiceGenerator.createService(FileUploadService.class);

        RequestBody requestBody = RequestBody.create(MEDIA_TYPE_JPEG, data);

        Call<String> call = service.send(requestBody);

        call.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, retrofit2.Response<String> response) {
                Log.d("Upload", "success = " + response.body());
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {

                Log.d("Upload","failure: " + t.getMessage());
            }
        });
    }

调用函数之后,我得到了奇怪的响应,类似于这样:

JFIF C C“
04-12 17:30:11.144 116 69-13785/mmlab.visualsearch d/okhttp:}!1AQA”Q2#b r$3 br
04-12 17:30:11.144 116 69-13785/mmlab.visualsearch d/okhttp:%&'()*456789:cdefghija stuvwxyzcdefghijstuvwxyz
04-12 17:30:11.144 116 69-13785/mmlab.visualsearch d/okhttp:w!1aqaq“2 b#3 r br

当我用Postman测试api时,我的服务器工作正常:

POST /vistek/myservice.php HTTP/1.1
Host: demo.mmlab.uit.edu.vn
Cache-Control: no-cache
Postman-Token: ba965fb1-f7b9-7344-8b8a-ab46095668d1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="myFile"; filename=""
Content-Type: 

----WebKitFormBoundary7MA4YWxkTrZu0gW

请帮助我知道我的代码发生了什么。提前谢了。

共有1个答案

刘瀚
2023-03-14

这不是奇怪的反应。它是压缩的(gzip)。

似乎您已经在header中添加了“accept-encoding”、“gzip”到请求中。在这种情况下,您有责任解压缩响应。

所以你能做的是:

StringBuilder stringBuilder = new StringBuilder();
ByteArrayInputStream bais = new ByteArrayInputStream(response.body().getBytes());
GZIPInputStream gzis = new GZIPInputStream(bais);
InputStreamReader reader = new InputStreamReader(gzis);
BufferedReader in = new BufferedReader(reader);

String readed;
while ((readed = in.readLine()) != null) {
    stringBuilder.append(readed);
}
in.close();
reader.close();
gzis.close();
String unZippedResponse = stringBuilder.toString();
 类似资料:
  • 我想上传一张图片,我正在使用http。客户端()用于发出请求, 请求的主体和编码部分应该是什么?

  • 我在尝试将swift中的图像上载到PHP服务器时遇到问题。在php处理文件之前,一切看起来都很好。在那一刻,我得到了错误。 swft代码的相关部分是: php是 最后,我得到的错误是: ******响应数据= 上载失败

  • 问题内容: 我正在尝试从Android设备将文件上传到php服务器。有相同问题的话题,但他使用的是不同的方法。我的Android辅助代码运行正常,并且未显示任何错误消息,但服务器未收到任何文件。这是我的示例代码,我在网上找到了。 和我的PHP服务器端代码如下 Apache正在运行。当我运行服务器时,出现此错误消息。上传文件时出错,请重试!我已经在eclipse中检查了日志数据,我认为是套接字问题,

  • 本文向大家介绍PHP实现上传图片到 zimg 服务器,包括了PHP实现上传图片到 zimg 服务器的使用技巧和注意事项,需要的朋友参考一下 最近我们项目需要一台图片服务器存储用户头像,我们使用 zimg 处理和存储图片,下面简单介绍一下如何使用 PHP 上传图片到 zimg,并获取相应图片的返回信息 使用 curl 库实现上传 根据 zimg 使用文档,我们想要让 zimg 返回 json 信息,

  • 我正在用Laravel5.6构建一个表单,在其中我保存了一个名字和一个用户照片,但我需要将照片与用户名一起存储。我展示了我商店的代码 我可以使用$request->nombre获得用户名; 但我不知道怎么给照片取名字

  • 是否可以使用server1将文件上传到server2? 访客请访问:我的网站。com(server1) 然后他将一个文件上传到server1,server1会自动将该文件上传到server2?? 或者简单地说,用户可以使用server1作为代理将文件上传到server2,因为server2只能从server1访问 会有帮助吗,还是有其他更好的解决方案?