2013-03-12 55 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

这似乎是您的服务器上的防火墙问题。连接被拒绝意味着你已经到达机器,但是没有服务运行来接受连接,或者它被防火墙阻止。

相关问题