2017-02-09 141 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( “文件名”, “” +文件名);'。 Welll记录/打印什么?是否有意义? – greenapps

+0

'FileNotFoundException:content:/com.andr .....'上传器需要一个文件路径。但是这是一个无效的文件路径。难怪没有找到'档案'。这是一个内容方案。它不能以这种方式处理内容方案。 – 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(); 

现在找到MIME类型,从文件中的临时文件

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