【问题标题】:Send image(jpg) via HttpPost from Android to Servlet(WebServer)通过 HttpPost 从 Android 将图像(jpg)发送到 Servlet(WebServer)
【发布时间】:2011-05-02 03:43:56
【问题描述】:

我的 SD 卡(jpg 类型)上有一张图片,我正在尝试通过 HttpPost 将图片发送到我在 Apache Tomcat 7.0 上运行的 servlet

到目前为止,我已经用谷歌搜索了这样做的方法,但我似乎找不到完美的方法。

你们中的任何人可能对这个问题有什么建议或解决方案吗?

提前谢谢你, 萨米·史蒂文·贾普

【问题讨论】:

    标签: android image servlets send http-post


    【解决方案1】:

    HttpClient 是要使用的类,并且有一个 tutorial 用于它。请参阅图片之后的使用 HTTP 客户端部分。

    更新
    以下是来自Developerlife.com 的教程示例的评论。该示例的一个好处是它演示了如何通过将一种类型编码为另一种类型来发送各种类型的数据。通过从链中与要发送的数据类型匹配的点开始,可以发送该数据转换链中使用的任何类型:

    Strings 被放入一个 Hashtable 中,该 Hashtable 被写入一个 ObjectOutputStream,该 ByteArrayOutputStream 支持该 ByteArrayOutputStream转换成 ByteArray 再转换成 ByteArrayEntity 进行传输。

    要仅发送 ByteArray,请跳过在数据变为 ByteArray 之前发生的所有步骤。跳转到第 26 行,其中使用toByteArray().

    创建了一个 ByteArray

    要发送其他类型,请执行以下操作(根据示例):
    第 26 行:ByteArray,用它来做一个 ByteArrayEntity
    第 26 行:ByteArrayOutputStream,将其转换为 ByteArray
    第 24 行:ObjectOutputStreams:在 ByteArrayOutputStreams
    上创建它们 第 25 行:Objects:将 StringsHashtables 等写入 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 
    

    【讨论】:

    • 好吧,我以前看过这个教程,但是它展示了发送字符串的方式。我不知道如何用同样的方法发送一个字节[]
    • 不,他们发送由 ByteArray 制成的 ByteArrayEntity。 ByteArray 恰好是在大约 6 次转换之前从 Strings 创建的。 Strings like "pwd" in Java are Objects,比 C 风格的字符串复杂得多,后者非常接近 ByteArray。 我更新了答案,希望对如何发送 ByteArray 有更清晰的解释。
    • 在使用所需的某些社交媒体(例如 Facebook)进行 LOGIN 和 LOGOUT 逻辑时是否也有用?
    【解决方案2】:

    我以更简洁的方式完成了这项工作,但使用的是 asp.net 'web form'。我相信有人可以轻松地在 servlet 中对其进行改造。你可以找到我的解决方案here

    干杯

    法哈

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 2012-07-24
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      相关资源
      最近更新 更多