Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 多部分改装2.0图像上载_Android_Api_Retrofit_Retrofit2 - Fatal编程技术网

Android 多部分改装2.0图像上载

Android 多部分改装2.0图像上载,android,api,retrofit,retrofit2,Android,Api,Retrofit,Retrofit2,我试图通过POST多部分请求上传图像,其结构如下: -----------------------------219391268715340 内容配置:表单数据;name=“photos[]”;filename=“DSCF0157 Laptop.JPG” 内容类型:图像/jpeg (字节数据) 我的代码: MediaType mediaType = MediaType.parse("image/jpeg"); ByteArrayOutputStream strea

我试图通过POST多部分请求上传图像,其结构如下:

-----------------------------219391268715340 内容配置:表单数据;name=“photos[]”;filename=“DSCF0157 Laptop.JPG” 内容类型:图像/jpeg

(字节数据)

我的代码:

        MediaType mediaType = MediaType.parse("image/jpeg");
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        byte[] byteArray = stream.toByteArray();

        RequestBody file=RequestBody.create(mediaType, byteArray);
        map.put("form-data; name=\"photos[]\"; filename=\""+filename+".jpg",file);

我之所以使用map是因为@PartMap注释-我想上传多个文件。我的服务器返回http代码200-但未上载任何文件。Api调用已经过测试-如果我们的web应用程序使用它,它将正常工作。你知道我做错了什么吗

如果你想使用改型2在一个请求中上传多个文件,你可以参考我对下面问题的回答

经过一些修改:

WebAPIService.java:

@Multipart
@POST("/api/fileupload")
Call<ResponseBody> postFiles(@Part List<MultipartBody.Part> fileList);
...
List<MultipartBody.Part> fileList = new ArrayList<>();
for (int i = 0; i < 2; i++){
    fileList.add(body);

}
Call<ResponseBody> call = service.postFiles(fileList);
call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call,
                           Response<ResponseBody> response) {
        Log.i(LOG_TAG, "success");
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
        Log.e(LOG_TAG, t.getMessage());
    }
});
@Multipart
@POST(“/api/fileupload”)
调用postFiles(@partlist fileList);
FileActivity.java:

@Multipart
@POST("/api/fileupload")
Call<ResponseBody> postFiles(@Part List<MultipartBody.Part> fileList);
...
List<MultipartBody.Part> fileList = new ArrayList<>();
for (int i = 0; i < 2; i++){
    fileList.add(body);

}
Call<ResponseBody> call = service.postFiles(fileList);
call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call,
                           Response<ResponseBody> response) {
        Log.i(LOG_TAG, "success");
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
        Log.e(LOG_TAG, t.getMessage());
    }
});
。。。
List fileList=new ArrayList();
对于(int i=0;i<2;i++){
添加(body);
}
Call Call=service.postFiles(文件列表);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用,
回应(回应){
Log.i(Log_标签,“success”);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(Log_标记,t.getMessage());
}
});
当然,使用上述代码,实际上,相同的文件(正文)将作为请求中的两个部分上载。因此,在web服务器中,您将有两个具有相同内容的文件,您可以使用许多不同的文件自定义
文件列表:)


希望有帮助

也许你可以这样做

yourapi服务

@Multipart
@POST("api/image/upload")
Call<ImageUploadResponse> uploadImage(@Part("photos") List<RequestBody> imageFiles);
@Multipart
@POST(“api/图像/上传”)
调用uploadImage(@Part(“photos”)列表imageFiles);
你的活动

//prepare request body
List<RequestBody> images = new ArrayList<>();
for (int i = 0; i < filePath.size(); i++){
RequestBody file = RequestBody.create(MediaType.parse("image/*"), filePath.get(i);
   images.add(file);
}

//call api
Call<ImageUploadResponse> call = imageUploadService.uploadImage(images);
  call.enqueue(new Callback<ImageUploadResponse>() {
      @Override
     public void onResponse(Call<ImageUploadResponse> call,
                         Response<ImageUploadResponse> response) {

     }

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

     }
});
//准备请求正文
列表图像=新的ArrayList();
对于(int i=0;i