2017-05-22 24 views
0

我嘗試在Retrofit中上傳多部分多圖片上傳,但它顯示了這樣的響應失敗錯誤[/ storage/emulated/0/Whatsapp/Media/WhatsApp Images/abc.jpg,/ storage/emulated/0/Whatsapp/Media/WhatsApp Images/abcd.jpg] open failed; ENOENT(沒有這樣的文件或目錄)多張Multiplart圖片上傳ENOENT在Retrofit 2.0中打開失敗的錯誤

我跟着這個教程... https://futurestud.io/tutorials/retrofit-2-how-to-upload-a-dynamic-amount-of-files-to-server

我使用這個庫圖片選擇器... https://github.com/myinnos/AwesomeImagePicker

Activity.java:

private void ImageChooser(){ 
    Intent intent = new Intent(this, AlbumSelectActivity.class); 
    intent.putExtra(ConstantsCustomGallery.INTENT_EXTRA_LIMIT,5); // set limit for image selection 
    startActivityForResult(intent, ConstantsCustomGallery.REQUEST_CODE); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == ConstantsCustomGallery.REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null) { 
     ArrayList<images> images = data.getParcelableArrayListExtra(ConstantsCustomGallery.INTENT_EXTRA_IMAGES); 

     ArrayList<String> imagelist = new ArrayList<>(); 
     for (int i = 0; i < images.size(); i++) { 
      Uri uri = Uri.fromFile(new File(images.get(i).path)); 
      String filePath = getRealPathFromURIPath(uri, WorkerAddPhotosActivity.this); 
      imagelist.add(filePath); 
     } 
      LoadWorkerInquiry(images) 
    } 
} 

private String getRealPathFromURIPath(Uri contentURI, Activity activity) { 
    Cursor cursor = activity.getContentResolver().query(contentURI, null, null, null, null); 
    if (cursor == null) { 
     return contentURI.getPath(); 
    } else { 
     cursor.moveToFirst(); 
     int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
     return cursor.getString(idx); 
    } 
} 

public void LoadWorkerInquiry(ArrayList<String> image) { 
    ApiConfig getResponse = AppConfig.getRetrofit().create(ApiConfig.class); 
    List<MultipartBody.Part> parts = new ArrayList<>(); 
    for (int index = 0; index < image.size(); index++) { 
     File file = new File(image.toString()); 
     RequestBody surveyBody = RequestBody.create(MediaType.parse("image/*"), file); 
     parts.add(MultipartBody.Part.createFormData("image", file.getName(), surveyBody)); 
    } 

    Call<WorkerImageUpload> call = getResponse.uploadImages(parts); 
    call.enqueue(new Callback<WorkerImageUpload>() { 
     @Override 
     public void onResponse(Call<WorkerImageUpload> call, retrofit2.Response<WorkerImageUpload> response) { 
      WorkerImageUpload serverResponse = response.body(); 
      if (response.isSuccessful()) { 
      } else { 
      } 
     } 

     @Override 
     public void onFailure(Call<WorkerImageUpload> call, Throwable t) { 
      if (t instanceof IOException) { 
       Error("Timeout",t.getMessage()); 
      } 
      else if (t instanceof IllegalStateException) { 
       Error("ConversionError",t.getMessage()); 
      } else { 
       Error("Error",t.getMessage()); 
      } 
     } 
    }); 
} 

Api接口:

@Multipart 
@POST("api/***") 
Call<WorkerImageUpload> uploadImages(@Part List<MultipartBody.Part> Image); 
+0

在此處張貼上傳的代碼 –

+0

請參閱代碼 –

回答

0

我假設你正在嘗試訪問WhatsApp內部存儲器,如果沒有明確授權的訪問權限,它將被禁止訪問。

嘗試訪問應用程序存儲中的文件。本文檔將有用:https://developer.android.com/guide/topics/data/data-storage.html

+0

我也在嘗試一些Camera,ScreenShot等圖像,但結果相同 –