【发布时间】:2011-05-02 03:43:56
【问题描述】:
我的 SD 卡(jpg 类型)上有一张图片,我正在尝试通过 HttpPost 将图片发送到我在 Apache Tomcat 7.0 上运行的 servlet
到目前为止,我已经用谷歌搜索了这样做的方法,但我似乎找不到完美的方法。
你们中的任何人可能对这个问题有什么建议或解决方案吗?
提前谢谢你, 萨米·史蒂文·贾普
【问题讨论】:
标签: android image servlets send http-post
我的 SD 卡(jpg 类型)上有一张图片,我正在尝试通过 HttpPost 将图片发送到我在 Apache Tomcat 7.0 上运行的 servlet
到目前为止,我已经用谷歌搜索了这样做的方法,但我似乎找不到完美的方法。
你们中的任何人可能对这个问题有什么建议或解决方案吗?
提前谢谢你, 萨米·史蒂文·贾普
【问题讨论】:
标签: android image servlets send http-post
HttpClient 是要使用的类,并且有一个 tutorial 用于它。请参阅图片之后的使用 HTTP 客户端部分。
更新
以下是来自Developerlife.com 的教程示例的评论。该示例的一个好处是它演示了如何通过将一种类型编码为另一种类型来发送各种类型的数据。通过从链中与要发送的数据类型匹配的点开始,可以发送该数据转换链中使用的任何类型:
Strings 被放入一个 Hashtable 中,该 Hashtable 被写入一个 ObjectOutputStream,该 ByteArrayOutputStream 支持该 ByteArrayOutputStream转换成 ByteArray 再转换成 ByteArrayEntity 进行传输。
要仅发送 ByteArray,请跳过在数据变为 ByteArray 之前发生的所有步骤。跳转到第 26 行,其中使用toByteArray().
要发送其他类型,请执行以下操作(根据示例):
第 26 行:ByteArray,用它来做一个 ByteArrayEntity
第 26 行:ByteArrayOutputStream,将其转换为 ByteArray
第 24 行:ObjectOutputStreams:在 ByteArrayOutputStreams
上创建它们
第 25 行:Objects:将 Strings、Hashtables 等写入 ObjectOutputStream。
1 /** this method is called in a non-"edt" thread */
2 private void _doInBackgroundPost() {
3 Log.i(getClass().getSimpleName(), "background task - start");
4
5
6 Hashtable<String, String> map = new Hashtable();
7 map.put("uid", uid);
8 map.put("pwd", pwd);
9
10 try {
11 HttpParams params = new BasicHttpParams();
12
13 // set params for connection...
14 HttpConnectionParams.setStaleCheckingEnabled(params, false);
15 HttpConnectionParams.setConnectionTimeout(params, NetworkConnectionTimeout_ms);
16 HttpConnectionParams.setSoTimeout(params, NetworkConnectionTimeout_ms);
17 DefaultHttpClient httpClient = new DefaultHttpClient(params);
18
19 // create post method
20 HttpPost postMethod = new HttpPost(LoginServiceUri);
21
22 // create request entity
23 ByteArrayOutputStream baos = new ByteArrayOutputStream();
24 ObjectOutputStream oos = new ObjectOutputStream(baos);
25 oos.writeObject(map);
26 ByteArrayEntity req_entity = new ByteArrayEntity(baos.toByteArray());
27 req_entity.setContentType(MIMETypeConstantsIF.BINARY_TYPE);
28
【讨论】:
【讨论】: