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

Android改版使用多部分请求上传图像文件

段兴为
2023-03-14
@Multipart
@POST("/Api/ApiSales/UploadImages")
void uploadImage(@Part("File") TypedFile file,
                      Callback<Response> callback);

RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint(appController.getInstance().getURL());
            builder.setRequestInterceptor(new RequestInterceptor() {
                @Override
                public void intercept(RequestFacade request) {
                    request.addHeader("Authorization", appController.getInstance().getAuthTokenString());
                }
            });
            builder.setLogLevel(RestAdapter.LogLevel.FULL);

            RestAdapter restAdapter = builder.build();

            RetrofitService service = restAdapter.create(RetrofitService.class);
            service.uploadImage(new TypedFile("image/png",toFile), new Callback<retrofit.client.Response>() {
                @Override
                public void success(retrofit.client.Response response, retrofit.client.Response response2) {
                    Log.i(TAG, response.toString());
                }

                @Override
                public void failure(RetrofitError error) {
                    Log.e(TAG, error.toString());
                }
            });

我有以下错误:

retrofit.RetrofitError: Write error: ssl=0x5ef8ad40: I/O error during system call, Connection reset by peer      

我为http请求设置了服务器,仍然得到错误:

  retrofit.RetrofitError: sendto failed: ECONNRESET (Connection reset by peer)

共有1个答案

范鸿
2023-03-14

我想你的界面应该是这样的。

 @Multipart
    @POST("/Api/ApiSales/UploadImages") 
    void uploadImage(@Header("Authorization") String user, 
    @Part("File") TypedFile file, Callback<Response> callback);

您应该首先从onActivityResult获得您的实际图像路径

final String imagePath = getRealPathFromURI(imageUri);

而getRealPathFromURI将是这样的。

private String getRealPathFromURI(Uri contentUri) {
        String[] projection = {MediaStore.Images.Media.DATA};
        CursorLoader loader = new CursorLoader(this, contentUri, projection, null, null, null);
        Cursor cursor = loader.loadInBackground();
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        String result = cursor.getString(column_index);
        cursor.close();
        return result;
    }
File photoFile = new File(imagePath);// image will be your real path
        String mimeType = getMimeType(imagePath);
        TypedFile photoTypedFile;
        if (mimeType != null) {
            photoTypedFile = new TypedFile(mimeType, photoFile);
        } else {
            photoTypedFile = new TypedFile("image/jpg", photoFile);
        }
RetrofitService service = restAdapter.create(RetrofitService.class);
            service.uploadImage("yourAuthorization", photoTypedFil, new Callback<retrofit.client.Response>() {
                @Override
                public void success(retrofit.client.Response response, retrofit.client.Response response2) {
                    Log.i(TAG, response.toString());
                }

                @Override
                public void failure(RetrofitError error) {
                    Log.e(TAG, error.toString());
                }
            });
 类似资料:
  • http://letitripple.org/htmlform.html 这是此html表单创建的请求。(我从chrome开发者工具中获得) ------WebKitFormBoundaryPug6XAUALAUPBR86内容-配置:表单-数据;name=“wp-user-avatars”;filename=“desert.jpg”内容-类型:image/jpeg

  • 我要哭了,因为我尝试了很多解决方案和话题,但都不起作用。 null 您需要发送一个多部分请求(enctype=“multipart/form-data”)。 所以,有人能请帮助我,为什么我有HTTP 400与上面的错误消息?我可以在代码中更改什么以使此调用工作?谢谢你

  • 我正在使用这个音频记录和视频文件,它是工作的,但我想用OKHTTP取代它。我没弄明白。有人能帮我一下吗?

  • 我是新的改装,我想上传一张带有不同参数的图片,比如name,dob,mobile。我不知道我错在哪里,请引导我。我遵循这个链接 这是我的代码 接口 上传代码

  • 我试图写一个通用代码上传文件到任何服务器(多部分职位)。< br >我已经在我的代码和各种stackoverflow解决方案中尝试了不同的头和请求类型,但仍然无法上传任何文件。 我不断收到以下HTML消息作为响应: 400 BAD请求 如何在Android中编写一个通用代码将文件上传到服务器?< br > Android代码:< br > 用于测试文件上传的 PHP 代码: