0

Android アプリから Tomcat でホストされている Java サーブレットに http 要求を送信しようとしています。アプリはテキストと画像のデータをサーブレットに送信しますが、サーブレットはマルチパート フォーム データを認識していないようです。このチュートリアルと、受信データを確認するための IRC ヘルプから少し指示がありました。

Android コード:
////libs: httpclient-4.1.3、httpcore-4.1.4、httpmime-4.1.3、apache-mime4j-core-0.7.2

HttpPost httpPost = new HttpPost(mURI);
MultipartEntity requestEntity = new MultipartEntity();
requestEntity.addPart("text", new StringBody("test text"));
requestEntity.addPart("image", new ByteArrayBody(mImage, "image"));
httpPost.setEntity(requestEntity);
HttpResponse httpResponse = mHttpClient.execute(httpPost);

サーブレット コード:

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) {
    try {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        File file = new File(getServletContext().getRealPath("/") + File.separator + "WEB-INF" + File.separator + "sms-mobile-image.jpg");
        file.createNewFile();
        Writer outfile = new OutputStreamWriter(new FileOutputStream(file));
        List<Part> formData = new ArrayList(request.getParts());
        if(formData.size()>0)
            System.out.println(formData.get(0).getName());
        else
            System.out.println("no form data found");
    } catch(Exception e) {
        System.out.println(e.toString());
    }
}

実際に送信されたデータ (wireshark で確認):

POST /mobile-image/ProcessRequest HTTP/1.1
Content-Length: 921897
Content-Type: multipart/form-data; boundary=ZiB5ibYqpxux_mP6HeswY9B__17vOLCVvay01
Host: 192.168.1.167:8080
Connection: Keep-Alive

--ZiB5ibYqpxux_mP6HeswY9B__17vOLCVvay01
Content-Disposition: form-data; name="text"
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 8bit

test text
--ZiB5ibYqpxux_mP6HeswY9B__17vOLCVvay01
Content-Disposition: form-data; name="image"; filename="image"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

[image-data-here]
--ZiB5ibYqpxux_mP6HeswY9B__17vOLCVvay01--

出力:

no form data found

web.xml 構成を調べるように提案されたので、それが次のステップになりますが、ここで途方に暮れています。これが機能するはずの方法ではありませんか?

4

1 に答える 1

0

com.oreilly.servletパッケージを使ってこれを解決することができました。それは残念ですが、私はまだ何か間違ったことをしているのではないかと思います。これはhttpclientライブラリに組み込まれるべきもののようです...興味があれば、このライブラリを利用する例はたくさんあります。私がフォローした例はここにあります: http://www.jguru。 com / faq / view.jsp?EID = 1045507

ページのどこかでsrinivasの返信に投稿されました。

于 2012-03-08T22:31:06.177 に答える