2016-07-11 51 views
0

在我的web服務中,我有簡單的上傳功能,通過cUrl進行測試,其工作正常,沒有任何問題,我可以通過cUrl成功上傳文件,現在我想從android上傳文件到Ion庫,但我得到這個錯誤:Android使用Ion上傳文件

unable to parse json 

我的代碼是:

Ion.with(ActivityAccountInfo.this) 
       .load(MyApplication.getHostAddress() + "clientUploadPhoto") 
       .uploadProgressHandler(new ProgressCallback() { 
        @Override 
        public void onProgress(long downloaded, long total) { 
         uploadMessage.setText("" + downloaded + "/" + total); 
        } 
       }) 
       .setTimeout(60 * 60 * 1000) 
       .setMultipartFile("userPhoto", "image/*", new File(photoPath)) 
       .asJsonObject() 
       // run a callback on completion 
       .setCallback(new FutureCallback<JsonObject>() { 
        @Override 
        public void onCompleted(Exception e, JsonObject result) { 
         if (e != null) { 

         } 
        } 
       }); 

和我的網絡功能:

Route::any('clientUploadPhoto', function() { 
    $filename = Request()->file('userPhoto'); 
    $destinationPath = base_path() . '/upload/'; 
    $new_filename = time() . '_' . $filename->getClientOriginalName(); 
    Image::make($filename->getRealPath())->save($destinationPath . $new_filename); 
}); 
+0

您確定可以將多部分文件作爲JSON對象上傳嗎? –

+0

@ cricket_007我認爲文件必須是流,而不是jsonObject,是嗎?在使用這種解決方案的'Ion'庫中,'cUrl'可以成功上傳文件 –

+0

我不知道你使用了哪個cURL命令,但'.asJsonObject()'看起來不適合上傳文件。 –

回答

0

問題通過其他的解決方案,集位圖後分解成ImageView我得到的位圖從與此代碼:

Bitmap bitmap = ((BitmapDrawable) user_avatar.getDrawable()).getBitmap(); 

,之後我是從創建Base64

public String getStringImage(Bitmap bmp) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.JPEG, 60, baos); 
    byte[] imageBytes = baos.toByteArray(); 
    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 
    return encodedImage; 
} 

現在我可以上傳與Ion和我轉換內部服務器:

php Laravel框架:

public function clientUploadPhoto() 
{ 
    $image = Request::json()->get('file'); 
    $ext = Request::json()->get('ext'); 

    file_put_contents(base_path() . '/upload/'.time().$ext,base64_decode($image)); 
}