2

我正在使用多部分和流将图像文件上传到我的实时服务器(WCF 服务)。图像大小为 500-700KB,当我使用真实相机时。从模拟器成功上传示例,但是当我将它安装到我的索尼爱立信 Arc S 时,应用程序没有上传任何图像。有用于检查状态代码的代码,但没有任何反应,没有错误,没有异常,没有服务器响应。在我的手机中,我正在使用移动数据连接(提供商 Grammen Phone,GSM,孟加拉国)。不明白是什么问题。有谁能够帮我?

安卓代码:

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

更新: 我在生成日志文件的异常捕获块中添加了一个日志写入器。“连接到 xxxx:xxxx 被拒绝”,所以很明显它正在获取异常并且它来自服务器端。但仍然不知道有什么问题。

更新: 最后,我遇到了问题!这是我在服务器端的“多部分解析器”,我在 android 代码中使用了错误的 ServiceURi。你必须小心选择你需要的解析器。我对我的解析器文件做了一些修改,它的工作原理!但是仍然需要修改解析器,因为需要合并很多其他人员。无论如何,感谢您的努力!有用的链接:http ://www.ideatoappster.com/android-to-wcf-streaming-multi-part-binary-images/

4

2 回答 2

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() 函数。

希望这能解决您的问题。

于 2013-03-12T09:36:56.013 回答
0

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

于 2013-03-12T18:34:18.730 回答