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
使用 JsonReader 将缓存的 Json 文件读取为 ByteArray