Android 如何在改装2中上载图像文件

Android 如何在改装2中上载图像文件,android,retrofit2,Android,Retrofit2,我有一张邮递员的照片,如下图所示。如何在改装2中执行相同的操作 我已经这样声明了接口 @Multipart @POST("/api/Pharmarcy/UploadImage") Call<ResponseBody> uploadPrescriptionImage( @Query("accessToken") String token, @Query("pharmarcyRequestId") int pharmacyRequestedId,

我有一张邮递员的照片,如下图所示。如何在改装2中执行相同的操作

我已经这样声明了接口

@Multipart
@POST("/api/Pharmarcy/UploadImage")
Call<ResponseBody> uploadPrescriptionImage(
        @Query("accessToken") String token,
        @Query("pharmarcyRequestId") int pharmacyRequestedId,
        @Part MultipartBody.Part image);
@Multipart
@POST(“/api/Pharmacy/UploadImage”)
调用uploadPrescriptionImage(
@查询(“accessToken”)字符串标记,
@PharmacyRequestId中的查询(“pharmarcyRequestId”),
@零件(多零件体、零件图像);
@Multipart
@POST(“用户/更新配置文件”)
可观察的updateProfile(@Part(“user_id”)请求主体id,
@部分(“全名”)请求主体全名,
@Part MultipartBody.Part image,
@部分(“其他”)请求机构(其他);
//像这样传过去
File File=新文件(“/storage/emulated/0/Download/Corrections 6.jpg”);
请求体请求文件=
create(MediaType.parse(“多部分/表单数据”),文件);
//Part还用于发送实际的文件名
多部分主体。部分主体=
MultipartBody.Part.createFormData(“image”,file.getName(),requestFile);
//在多部分请求中添加另一部分
RequestBody全名=
create(MediaType.parse(“多部分/表单数据”),“您的姓名”);
服务更新配置文件(id、全名、正文、其他);
看看我传递multipart和string参数的方式。希望这对你有帮助

@Multipart
@POST(“用户/更新配置文件”)
可观察的updateProfile(@Part(“user_id”)请求主体id,
@部分(“全名”)请求主体全名,
@Part MultipartBody.Part image,
@部分(“其他”)请求机构(其他);
//像这样传过去
File File=新文件(“/storage/emulated/0/Download/Corrections 6.jpg”);
请求体请求文件=
create(MediaType.parse(“多部分/表单数据”),文件);
//Part还用于发送实际的文件名
多部分主体。部分主体=
MultipartBody.Part.createFormData(“image”,file.getName(),requestFile);
//在多部分请求中添加另一部分
RequestBody全名=
create(MediaType.parse(“多部分/表单数据”),“您的姓名”);
服务更新配置文件(id、全名、正文、其他);

看看我传递multipart和string参数的方式。希望这对你有帮助

使用改装2.0,您可以使用:

@Multipart
    @POST("uploadImage")
    Call<ResponseBody> uploadImage(@Part("file\"; fileName=\"myFile.png\" ")RequestBody requestBodyFile, @Part("image") RequestBody requestBodyJson);
@Multipart
@POST(“上传图像”)
调用uploadImage(@Part(“file\”文件名=\“myFile.png\”)RequestBody requestBodyFile,@Part(“image”)RequestBody requestBodyJson);
提出请求:

File imgFile = new File("YOUR IMAGE FILE PATH");
RequestBody requestBodyFile = RequestBody.create(MediaType.parse("image/*"), imgFile);
RequestBody requestBodyJson = RequestBody.create(MediaType.parse("text/plain"),
                    retrofitClient.getJsonObject(uploadRequest));



//make sync call
Call<ResponseBody> uploadBundle = uploadImpl.uploadImage(requestBodyFile, requestBodyJson);
Response<BaseResponse> response = uploadBundle.execute();
File imgFile=新文件(“您的图像文件路径”);
RequestBody requestBodyFile=RequestBody.create(MediaType.parse(“image/*”),imgFile);
RequestBody requestBodyJson=RequestBody.create(MediaType.parse(“text/plain”),
getJsonObject(uploadRequest));
//进行同步呼叫
调用uploadBundle=uploadImpl.uploadImage(requestBodyFile,requestBodyJson);
Response=uploadBundle.execute();

请参阅使用改型2.0。您可以使用:

@Multipart
    @POST("uploadImage")
    Call<ResponseBody> uploadImage(@Part("file\"; fileName=\"myFile.png\" ")RequestBody requestBodyFile, @Part("image") RequestBody requestBodyJson);
@Multipart
@POST(“上传图像”)
调用uploadImage(@Part(“file\”文件名=\“myFile.png\”)RequestBody requestBodyFile,@Part(“image”)RequestBody requestBodyJson);
提出请求:

File imgFile = new File("YOUR IMAGE FILE PATH");
RequestBody requestBodyFile = RequestBody.create(MediaType.parse("image/*"), imgFile);
RequestBody requestBodyJson = RequestBody.create(MediaType.parse("text/plain"),
                    retrofitClient.getJsonObject(uploadRequest));



//make sync call
Call<ResponseBody> uploadBundle = uploadImpl.uploadImage(requestBodyFile, requestBodyJson);
Response<BaseResponse> response = uploadBundle.execute();
File imgFile=新文件(“您的图像文件路径”);
RequestBody requestBodyFile=RequestBody.create(MediaType.parse(“image/*”),imgFile);
RequestBody requestBodyJson=RequestBody.create(MediaType.parse(“text/plain”),
getJsonObject(uploadRequest));
//进行同步呼叫
调用uploadBundle=uploadImpl.uploadImage(requestBodyFile,requestBodyJson);
Response=uploadBundle.execute();
请参阅多部分 @POST(配置上传图片) 可观察的上传照片(@Header(“访问令牌”)字符串头,@Part MultipartBody.Part imageFile); 您可以这样调用此api:

   public void uploadImage(File file) {
     // create multipart
     RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestFile);

    // upload
    getViewInteractor().showProfileUploadingProgress();

    Observable<Response<String>> observable = api.uploadPhoto("",body);

    // on Response
    subscribeForNetwork(observable, new ApiObserver<Response<String>>() {
        @Override
        public void onError(Throwable e) {
            getViewInteractor().hideProfileUploadingProgress();
        }

        @Override
        public void onResponse(Response<String> response) {

            if (response.code() != 200) {
                Timber.d("error " + response.code());
                return;
            }
            getViewInteractor().hideProfileUploadingProgress();
            getViewInteractor().onProfileImageUploadSuccess(response.body());

        }
    });

}
public void上传图像(文件){
//创建多部分
RequestBody requestFile=RequestBody.create(MediaType.parse(“多部分/表单数据”),文件);
MultipartBody.Part body=MultipartBody.Part.createFormData(“image”,file.getName(),requestFile);
//上传
getViewInteractor().showProfileUploadingProgress();
可观察=api.上传照片(“,正文);
//回应
SubscribeBeforNetwork(可观察,新ApiObserver(){
@凌驾
公共无效申报人(可丢弃的e){
getViewInteractor().hideProfileUploadingProgress();
}
@凌驾
公共响应(响应){
如果(response.code()!=200){
Timber.d(“error”+response.code());
返回;
}
getViewInteractor().hideProfileUploadingProgress();
getViewInteractor().onProfileImageUploadSuccess(response.body());
}
});
}
@Multipart
@POST(配置上传图片)
可观察的上传照片(@Header(“访问令牌”)字符串头,@Part MultipartBody.Part imageFile);
您可以这样调用此api:

   public void uploadImage(File file) {
     // create multipart
     RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestFile);

    // upload
    getViewInteractor().showProfileUploadingProgress();

    Observable<Response<String>> observable = api.uploadPhoto("",body);

    // on Response
    subscribeForNetwork(observable, new ApiObserver<Response<String>>() {
        @Override
        public void onError(Throwable e) {
            getViewInteractor().hideProfileUploadingProgress();
        }

        @Override
        public void onResponse(Response<String> response) {

            if (response.code() != 200) {
                Timber.d("error " + response.code());
                return;
            }
            getViewInteractor().hideProfileUploadingProgress();
            getViewInteractor().onProfileImageUploadSuccess(response.body());

        }
    });

}
public void上传图像(文件){
//创建多部分
RequestBody requestFile=RequestBody.create(MediaType.parse(“多部分/表单数据”),文件);
MultipartBody.Part body=MultipartBody.Part.createFormData(“image”,file.getName(),requestFile);
//上传
getViewInteractor().showProfileUploadingProgress();
可观察=api.上传照片(“,正文);
//回应
SubscribeBeforNetwork(可观察,新ApiObserver(){
@凌驾
公共无效申报人(可丢弃的e){
getViewInteractor().hideProfileUploadingProgress();
}
@凌驾
公共响应(响应){
如果(response.code()!=200){
Timber.d(“error”+response.code());
返回;
}
public interface Api {

    @Multipart
    @POST("upload")
    Call<MyResponse> uploadImage(@Part("image\"; filename=\"myfile.jpg\" ") RequestBody file, @Part("desc") RequestBody desc);

}
private void uploadFile(File file, String desc) {

        //creating request body for file
        RequestBody requestFile = RequestBody.create(MediaType.parse(getContentResolver().getType(fileUri)), file);
        RequestBody descBody = RequestBody.create(MediaType.parse("text/plain"), desc);

        //The gson builder
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();


        //creating retrofit object
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Api.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();

        //creating our api 
        Api api = retrofit.create(Api.class);

        //creating a call and calling the upload image method 
        Call<MyResponse> call = api.uploadImage(requestFile, descBody);

        //finally performing the call 
        call.enqueue(new Callback<MyResponse>() {
            @Override
            public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
                if (!response.body().error) {
                    Toast.makeText(getApplicationContext(), "File Uploaded Successfully...", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getApplicationContext(), "Some error occurred...", Toast.LENGTH_LONG).show();
                }
            }

            @Override
            public void onFailure(Call<MyResponse> call, Throwable t) {
                Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_LONG).show();
            }
        });
    }
interface servicesEndPoint {
@Multipart
@POST("user/updateprofile")
fun updateProfile(@Part("user_id") id:RequestBody, @Part("full_name") other:fullName, @Part image: MultipartBody.Part, @Part("other") other:RequestBody): Single<UploadPhotoResponse>

companion object {
        val API_BASE_URL = "YOUR_URL"

        fun create(): servicesPhotoEndPoint {
            val retrofit = Retrofit.Builder()
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(API_BASE_URL)
                .build()
            return retrofit.create(servicesPhotoEndPoint::class.java)
        }
    }
}

// pass it like this
val file = File(RealPathUtils.getRealPathFromURI_API19(context, uri))  
val requestFile: RequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file)

// MultipartBody.Part is used to send also the actual file name
val body: MultipartBody.Part = MultipartBody.Part.createFormData("image", file.name, requestFile)

// add another part within the multipart request
val fullName: RequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), "Your Name")

servicesEndPoint.create().updateProfile(id, fullName, body, fullName)
@Multipart
@POST(APIUtils.UPDATE_PROFILE_IMAGE_URL)
public Call<CommonResponse> requestUpdateImage(@PartMap Map<String, RequestBody> map);
    Map<String, RequestBody> params = new HashMap<>();

    params.put("newProfilePicture" + "\"; filename=\"" + FilenameUtils.getName(file.getAbsolutePath()), RequestBody.create(MediaType.parse("image/jpg"), file));



 Call<CommonResponse> call = request.requestUpdateImage(params);
@Multipart
@POST("pictures")
suspend fun uploadPicture(
        @Part part: MultipartBody.Part
): NetworkPicture
suspend fun upload(inputStream: InputStream) {
   val part = MultipartBody.Part.createFormData(
         "pic", "myPic", RequestBody.create(
              MediaType.parse("image/*"),
              inputStream.readBytes()
          )
   )
   uploadPicture(part)
}
// In your service
 @PUT
 suspend fun s3Upload(
     @Header("Content-Type") mime: String,
     @Url uploadUrl: String, 
     @Body body: RequestBody 
 )
// In your repository
val body = RequestBody.create(MediaType.parse("application/octet"), inputStream.readBytes())
networkService.s3Upload(mime, url, body)
    private fun pickImage() {
        val intent = Intent(Intent.ACTION_GET_CONTENT)
        intent.type = "image/*"
        startActivityForResult(intent, PICK_PHOTO)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == PICK_PHOTO && resultCode == Activity.RESULT_OK) {
            try {
                data?.let {
                    val inputStream: InputStream? =
                        context?.contentResolver?.openInputStream(it.data!!)
                    inputStream?.let { stream ->
                        itemViewModel.uploadPicture(stream)
                    }
                }
            } catch (e: FileNotFoundException) {
                e.printStackTrace()
            }
        }
    }

    companion object {
        const val PICK_PHOTO = 1
    }