2017-02-09 19 views
0

イメージ、docまたは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); 

拡張子がMIMEに依存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); 
をMIMEタイプを見つけることができます今すぐファイルに書き込む

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(); 
関連する問題