2017-02-09 15 views
0

После выбора изображения, документа или pdf, я хочу передать их через okhttp3. Как я могу это сделать?Загрузка файла через okhttp3

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 

    if(resultCode==RESULT_OK && requestCode==0){ 
     Log.d("uri data",""+data.getData()); 

     selectedFileUri = data.getData(); 
     fileToBeUploaded = new File(""+selectedFileUri); 
     fileName = fileToBeUploaded.getName(); 
     Log.d("filename",""+fileName); 

И okhttp 3

RequestBody formBody = new MultipartBody.Builder() 
        .setType(MultipartBody.FORM) 
        .addFormDataPart("data[User][user_picture]", fileToBeUploaded.getName(),RequestBody.create(MediaType.parse("*/*"), fileToBeUploaded)) 

Показывая ошибка

java.io.FileNotFoundException: content:/com.android.providers.media.documents/document/image%3A40227: open failed: ENOENT (No such file or directory) 

Спасибо.

+0

'Log.d ("имя файла", "" + Filename);'. Хорошо, что он записывает/печатает? Имеет ли это смысл? – greenapps

+0

'FileNotFoundException: content: /com.andr .....' Загружатель ожидает путь к файлу. Но это недействительный путь к файлу. Неудивительно, что «файл» не найден. Это схема контента. Таким образом, он не может обрабатывать схемы conten. – greenapps

+0

@greenapps Тогда что мне делать, чтобы получить путь к файлу и, следовательно, файл? –

ответ

0

Так что я сам отвечаю на этот вопрос.

Так что я сначала открываю выходной поток во временный файл.

imageTempUploadfile=new File(Environment.getExternalStorageDirectory()+"/inpaint/"); 
if(!imageTempUploadfile.exists()) 
    imageTempUploadfile.mkdirs(); 
    imageTempUploadfile2 = new File(Environment.getExternalStorageDirectory() + "/inpaint/"+"file"+".docx"); 
OutputStream outputTempFileStream = new FileOutputStream(imageTempUploadfile2); 

Расширение зависит от мимики type.You может найти тип пантомимы по

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 

    if(resultCode==RESULT_OK && requestCode==0){ 
     Log.d("uri data",""+data.getData()); 

     String mimetype = context.getContentResolver().getType(data.getData()); 

     selectedFileUri = data.getData(); 

Теперь для чтения из файла и записи его содержимого во временном файле

selectedFileInputStream = getContentResolver().openInputStream(selectedFileUri); 

Теперь, чтобы записать в файл

try { 
    try { 
     byte[] buffer = new byte[4 * 1024]; // or other buffer size 
     int read; 

     while ((read = selectedFileInputStream.read(buffer)) != -1) { 
      outputTempFileStream.write(buffer, 0, read); 
     } 
     outputTempFileStream.flush(); 
    } finally { 
     outputTempFileStream.close(); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); // handle exception, define IOException and others 
} 

И наконец

MultipartUtility multipart = new MultipartUtility(urlLeaveFormApply, charset); 
multipart.addFilePart("data[User][user_picture]", imageTempUploadfile2); 

В конце после успеха

imageTempUploadfile2.delete(); 

 Смежные вопросы

  • Нет связанных вопросов^_^