2017-02-09 8 views
0

Nach der Auswahl Bild, doc oder pdf, ich möchte sie durch okhttp3 übergeben.Wie gehe ich dabei? Datei-Upload durch 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); 

Und in okhttp 3

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

Der Fehler zeigt ist

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

Dank.

+0

'Log.d ("filename", "" + filename);'. Welll was loggt/druckt es? Macht das Sinn? – greenapps

+0

'FileNotFoundException: content: /com.andr .....' Der Uploader erwartet einen Dateipfad. Aber das ist ein ungültiger Dateipfad. Kein Wunder, dass 'die Datei' nicht gefunden wird. Dies ist ein Inhaltsschema. Auf diese Weise kann conten Schemen nicht behandelt werden. – greenapps

+0

@greenapps Was sollte ich tun, um den Dateipfad und damit die Datei zu erhalten? –

Antwort

0

Also beantworte ich diese Frage selbst.

Also ich öffne zuerst einen Ausgabestrom zu einer temporären Datei.

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

Die Verlängerung hängt von dem Mime type.You den Mime-Typen von

@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(); 

nun aus der Datei lesen und schreiben seinen Inhalt in der temporären Datei

selectedFileInputStream = getContentResolver().openInputStream(selectedFileUri); 
findet

Jetzt in die Datei schreiben

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 
} 

Und schließlich

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

Am Ende nach Erfolg

imageTempUploadfile2.delete();