Image 如何使用改型2.0仅上载图像

Image 如何使用改型2.0仅上载图像,image,file,upload,retrofit,retrofit2,Image,File,Upload,Retrofit,Retrofit2,尝试上载图像时,它会一直以字节而不是图像文件的形式发送。这是一个非常简单的调用,除了图像本身,我不需要发送任何参数。我不知道如何格式化日志,所以除非请求,否则我不会在这里发布错误 服务: public interface FileUploadService { @Multipart @POST("upload_profile_picture") Call<ResponseBody> uploadProfilePicture(@Part("profile_picture") Requ

尝试上载图像时,它会一直以字节而不是图像文件的形式发送。这是一个非常简单的调用,除了图像本身,我不需要发送任何参数。我不知道如何格式化日志,所以除非请求,否则我不会在这里发布错误

服务:

public interface FileUploadService {

@Multipart
@POST("upload_profile_picture")
Call<ResponseBody> uploadProfilePicture(@Part("profile_picture") RequestBody file);
}
公共接口文件上传服务{
@多部分
@帖子(“上传个人资料图片”)
调用uploadProfilePicture(@Part(“profile_picture”)请求主体文件);
}
正在进行的调用(先前生成了一个文件,必须删除此代码,因为这样需要帖子主要是words..dumb..):

//从接口生成服务
FileUploadService=ServiceGenerator.createService(FileUploadService.class,this);
//从文件创建RequestBody实例
请求体请求文件=
create(MediaType.parse(“image/*”),imageFile);
Log.d(Log_标签,“格式文件”);
//最后,执行请求
Call Call=service.uploadProfilePicture(请求文件);
Log.d(Log_标签,“发送呼叫”);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用,
回应(回应){
Log.d(Log_标签“success”);
Log.d(Log_标记,response.toString());
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
日志d(日志标签“故障”);
Log.e(Log_标记,t.getMessage());
}
});
MediaType.parse方法是否存在问题?我也尝试过“多部分/表单数据”、“图像/jpeg”和上面的方法,但都没有效果

服务器团队表示他们正在接收呼叫,只接收字节,没有图像文件

我一直得到400,因为它发送所有字节。我怎么能发这个?我需要作为多部分发送还是什么?从我所看到的,您只需要在方法中用@Body标记param,然后执行上面的操作,就可以了。有谁能告诉我为什么会这样?谢谢

这是改装2中的一个

编辑:在最终2.0版本中添加了对OkHttp的
多部分正文的支持

为了使其正常工作,您需要先稍微更改一下界面:

@Multipart
@帖子(“上传个人资料图片”)
调用uploadProfilePicture(@Part MultipartBody.Part文件);
然后您必须创建
部分
,并按如下方式进行调用:

MultipartBody.Part文件=MultipartBody.Part.createFormData(
“文件”,
imageFile.getName(),
create(MediaType.parse(“image/*”,imageFile));
Call Call=service.uploadProfilePicture(文件);
这是改装2中的一款

编辑:在最终2.0版本中添加了对OkHttp的
多部分正文的支持

为了使其正常工作,您需要先稍微更改一下界面:

@Multipart
@帖子(“上传个人资料图片”)
调用uploadProfilePicture(@Part MultipartBody.Part文件);
然后您必须创建
部分
,并按如下方式进行调用:

MultipartBody.Part文件=MultipartBody.Part.createFormData(
“文件”,
imageFile.getName(),
create(MediaType.parse(“image/*”,imageFile));
Call Call=service.uploadProfilePicture(文件);
    // Generate the service from interface
    FileUploadService service = ServiceGenerator.createService(FileUploadService.class, this);

    // Create RequestBody instance from file
    RequestBody requestFile =
            RequestBody.create(MediaType.parse("image/*"), imageFile);
    Log.d(LOG_TAG, "formed file");

    // finally, execute the request
    Call<ResponseBody> call = service.uploadProfilePicture(requestFile);
    Log.d(LOG_TAG, "sending call");
    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call,
                               Response<ResponseBody> response) {
            Log.d(LOG_TAG, "success");
            Log.d(LOG_TAG, response.toString());
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Log.d(LOG_TAG, "failure");
            Log.e(LOG_TAG, t.getMessage());
        }
    });