2013-03-12 43 views
2

我正在使用多部分和流將圖像文件上傳到我的實時服務器(WCF服務)。 圖像大小爲500-700KB,當我使用真正的相機。從模擬器它成功上傳樣品,但是當我將它安裝到我的索尼愛立信Arc S時,應用程序不會上傳任何圖像。有代碼檢查狀態代碼,但沒有發生,沒有錯誤,沒有例外,沒有服務器響應。在我的手機我使用移動數據連接(供應商格雷門電話,GSM,孟加拉國)。不明白是什麼問題。有誰能夠幫助我?文件上傳在模擬器中工作,但不在設備中

的Andriod代碼:

HttpPost httppost = new HttpPost(SERVICE_URI + "/uploadImage"); 
       DefaultHttpClient httpclient = new DefaultHttpClient(); 
       File dir = Environment.getExternalStorageDirectory(); 
       File imageFile = new File(dir, getImagepath(directoryName, false));  
       if (imageFile.exists()) { 
        MainActivity.this.runOnUiThread(new Runnable() { 
         public void run() { 
          Toast.makeText(MainActivity.this, "File Exist", Toast.LENGTH_SHORT) 
            .show(); 
         } 
        }); 

        MultipartEntity entity = new MultipartEntity(); 
        entity.addPart("image", new FileBody(imageFile, "image/jpeg")); 
        httppost.setEntity(entity); 

        HttpResponse response = httpclient.execute(httppost); 
        StatusLine statusLine = response.getStatusLine(); 
        final int statusCode = statusLine.getStatusCode(); 

        if (statusCode == 200) { 
         MainActivity.this.runOnUiThread(new Runnable() { 
           public void run() { 
            Toast.makeText(MainActivity.this, "Upload successful!", Toast.LENGTH_SHORT) 
              .show(); 
           } 
          }); 
        } else { 
         MainActivity.this.runOnUiThread(new Runnable() { 
           public void run() { 
            Toast.makeText(MainActivity.this, "File Upload Failed,status:"+statusCode, Toast.LENGTH_SHORT) 
              .show(); 
           } 
          }); 
        } 
       } else { 
        MainActivity.this.runOnUiThread(new Runnable() { 
          public void run() { 
           Toast.makeText(MainActivity.this, "File dont't exist", Toast.LENGTH_SHORT) 
             .show(); 
          } 
         }); 
       } 

更新: 我在其中生成日誌文件中的異常catch塊添加記錄寫入「連接到XXXX:XXXX拒絕」,所以很顯然,它正在得到一個異常,它是從服務器端。但仍然不知道是什麼問題。

更新: 最後,我得到了這個問題這是我的「多分析器」在服務器端,我用錯了ServiceURi android系統中的代碼。你必須要小心選擇適合您need.I解析器!對我的解析器文件做了很少的修改,並且工作正常!但仍然需要修改解析器,因爲需要整合許多其他員工。無論如何,感謝您的努力!有用的鏈接:http://www.ideatoappster.com/android-to-wcf-streaming-multi-part-binary-images/

+0

通過android ConnectivityManager。上傳前首先檢查連接是否正常。 \t connectivity =(ConnectivityManager)上下文 \t \t \t \t .getSystemService(context.CONNECTIVITY_SERVICE); \t \t netInfo = connectivity.getActiveNetworkInfo(); – 2013-03-12 09:40:25

回答

0

我們這個方法URI路徑轉換爲字符串

public String getImagepath(Uri uri) { 
     String[] largeFileProjection = { MediaStore.Images.ImageColumns._ID, 
       MediaStore.Images.ImageColumns.DATA }; 
     String largeFileSort = MediaStore.Images.ImageColumns._ID + " DESC"; 
     Cursor myCursor = this.managedQuery(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       largeFileProjection, null, null, largeFileSort); 
     String largeImagePath = ""; 
     try { 
      myCursor.moveToFirst(); 
      largeImagePath = myCursor 
        .getString(myCursor 
          .getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA)); 
     } finally { 
      myCursor.close(); 
     } 
     return largeImagePath; 
    } 



public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     super.onActivityResult(requestCode, resultCode, intent); 

     switch (requestCode) { 
       case PICK_FROM_CAMERA: 
      if (resultCode == Activity.RESULT_OK) { 
        Uri mImageCaptureUri = intent.getData(); 

       Bitmap bitmapImage = (Bitmap)intent.getExtras().get("data"); 
         } 
} 

爲獲得此URI的字符串道路onActivityResult

調用此getImagepath(mImageCaptureUri)

可能問題會獲取捕獲圖像路徑。 所以試試這個getImagepath()函數。

希望這會解決您的問題。

+0

對不起,早些時候嘗試過,你會得到非常低質量的圖像get(「數據」),我上傳圖像時,沒有問題,除了沒有從服務器響應的問題。 – mnhmilu 2013-03-12 09:43:37

0

這似乎是您的服務器上的防火牆問題。連接被拒絕意味着你已經到達機器,但是沒有服務運行來接受連接,或者它被防火牆阻止。

相關問題