Retrofit 2多部分文件上传,使用不同的文件名

3

这是我的代码。它可以正常工作。但我想上传其他类型的图片,比如png、jpeg等。因此我想改变filename=\"file1.jpeg"。

另外,我想同时发送不同数量的文件。

请帮助我解决这个问题。谢谢。

public interface FileUploadService {  
    @Multipart
    @POST("upload")
    Call<ResponseBody> upload(@Part("description") RequestBody description,@Part("file1\"; filename=\"file1.jpeg") RequestBody file1);
}



  private void uploadFile() {  
        FileUploadService service =
                ServiceGenerator.createService(FileUploadService.class);

        RequestBody requestFile =
                RequestBody.create(MediaType.parse("multipart/form-data"), new File("/path/to/mypic.jpeg"));

        String descriptionString = "hello, this is description speaking";
        RequestBody description =
                RequestBody.create(
                        MediaType.parse("multipart/form-data"), descriptionString);

        Call<ResponseBody> call = service.upload(description, body);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call,
                                   Response<ResponseBody> response) {
                Log.v("Upload", "success");
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.e("Upload error:", t.getMessage());
            }
        });
    }

请使用Retrofit 2.0发布多部分表单数据,包括图像。 - Matt Wolfe
1个回答

1

Try this one:

@POST("upload")
fun upload(@BODY parts: MultipartBody): Call<ResponseBody>

而客户端的代码将如下所示:

val parts = MultipartBody.Builder()
                    .addFormDataPart(name = "name",filename = "yourDynamicFileName", RequestBody.create(...))
                    .build()
// don't forget to name an extension of your file

api.upload(parts).execute()

我错过的重要事情是,“youDynamicFileName”需要有文件扩展名。 - C. Skjerdal
@C.Skjerdal 是的,你可能是对的。我会在我的回答中进行更改,谢谢。 - Станислав Земляков
"@BODY"注解是什么? - AlexS
这意味着一个HTTP请求的主体。 - Станислав Земляков

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接