Android将文件作为ByteArray上传到WCF REST服务

Posted

技术标签:

【中文标题】Android将文件作为ByteArray上传到WCF REST服务【英文标题】:Android uploading file as ByteArray to WCF REST services 【发布时间】:2012-01-26 15:34:55 【问题描述】:

我需要使用 WCF 休息服务发送一个字节数组文件。我必须在 android 中使用 HttpPost 方法发送数据。我使用的代码将状态为 HTTP/1.1 400 Bad Request 错误。

  private final static String URI = "http://192.168.1.15/QueryService/Import/Test";
         final HttpPost request = new HttpPost(URI);
            final HttpClient httpClient = new DefaultHttpClient();
            final ByteArrayEntity entity = new ByteArrayEntity(fileToBytes(pathToOurFile));
            entity.setContentType("application/octet-stream");
            entity.setChunked(true);
            request.setEntity(entity);
            final HttpResponse hr = httpClient.execute(request);
           final StatusLine status = hr.getStatusLine();
        httpClient.getConnectionManager().shutdown();

【问题讨论】:

【参考方案1】:

很难判断您的请求有什么问题。解决此类错误的标准方法是:

为您的服务创建一个 WCF 客户端。验证它是否按预期工作。 使用Fiddler 或其他合适的工具来拦截客户端正在生成的HTTP 请求。标题和正文都很重要。 修改您的 Android 请求以生成与 WCF 客户端完全相同的请求。

【讨论】:

我使用 Fiddler,但它没有显示我的应用程序发出的 http 请求。我还将模拟器代理更改为提琴手 ip 地址。当我通过模拟器浏览任何网站时,它会显示在 Fiddler 中,但不会在 fiddler 中显示我的应用程序请求。同样的代码也适用于 StringEntity,但在 Fiddler 中不显示任何进程。 这听起来像是模拟器问题。您可以使用中间客户端轻松拦截请求。我过去成功地使用了code.google.com/p/tcpmon。 我可以将请求发送到服务,但似乎我发送的请求格式不正确,我必须在 Web 服务中接收。我也尝试通过多方以流格式发送数据,但没有得到任何响应。【参考方案2】:

我也面临 WCF 服务的同样问题。 400 Bad request 表示您传递给方法的请求参数值与方法的参数不匹配。我使用 Base64 字符串编码将文件作为方法参数传递。希望对你有帮助。

【讨论】:

以上是关于Android将文件作为ByteArray上传到WCF REST服务的主要内容,如果未能解决你的问题,请参考以下文章

在 Java byte[] 中转换 Flex ByteArray

谷歌 PubSub 存在拉式订阅者设计缺陷?

用PHP将ByteArray保存到文件

使用 JsonReader 将缓存的 Json 文件读取为 ByteArray

如何将 bytearray 转换为 image 或 image 转换为 bytearray ?

在android中将图像作为BLOB上传到SQL