1

Restful Web サービスを呼び出して、サーバー上で複数の画像を base64 形式で送信する必要があるアプリケーションを開発しています。

Restful Web サービスを呼び出すコード:

try {
            //instantiates httpclient to make request
            DefaultHttpClient httpclient = new DefaultHttpClient();

            //url with the post data
            HttpPost request = new HttpPost(urlPath);

            //convert parameters into JSON object
            JSONObject holder = new JSONObject(jsonObjString);

            //passes the results to a string builder/entity
            StringEntity se = new StringEntity(holder.toString());

            //sets the post request as the resulting string
            request.setEntity(se);
            //sets a request header so the page receving the request
            //will know what to do with it
            request.setHeader("Accept", "application/json");
            request.setHeader("Content-type", "application/json");

            //Handles what is returned from the page 
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            responseString = httpclient.execute(request, responseHandler);
        }catch (Exception e) {
            e.printStackTrace();
        }

もう 1 つの問題は、JSON オブジェクトを要求パラメーターとして使用して Web サービスを呼び出すと、ThreadPoolExecutor が取得されることです。この問題を解決する方法。Restful Web サービスを呼び出して、複数の base64 イメージをサーバーにアップロードする完璧な方法はありますか?

4

2 に答える 2

1

これは、マルチパートで画像をアップロードするコードです。画像を base64 形式でアップロードします。

    String url = "xyz";//url here.
    File file = new File("image path on harddrive");//make a file of image.

    MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    mpEntity.addPart("content", new FileBody(file, "application/octet"));

    HttpPost httppost = new HttpPost( url);
    httppost.setEntity(mpEntity);

     DefaultHttpClient httpclient = new DefaultHttpClient();
     HttpResponse response;
        try {
            response = httpclient.execute(httppost);
        }

        catch(Exception e){
            e.printStackTrace();
        }
于 2013-11-08T12:37:07.173 に答える
1

私も同じ問題に直面していましたが、いくつかの調査の後、並べ替えました。安らかなWebサービスを介してjsonに複数の画像を投稿することはできません。

これを行うには、xml 形式を使用してサービスをヒットする必要があります。

1) 最初に xml リクエストを作成します。

public  String createXMLRequestForMultiplePhoto() {
        StringBuffer strBuffer = null;
        try {
            strBuffer = new StringBuffer();
            strBuffer.append("<?xml version='1.0' encoding='utf-8'?><UploadChallanMultiplePhoto>");

            strBuffer.append("<userid>"
                    + Constant.USER_ID
                    + "</userid>");
            strBuffer.append("<accesstoken>"
                    + Constant.ACCESS_TOCKEN
                    + "</accesstoken>");

            strBuffer.append("<TempChallanNo>"
                    + "0"
                    + "</TempChallanNo>");


            //ADD MULTIPLE PHOTO TAGS START
            strBuffer.append("<driverphotos>");
            int i=0;
            while(i<hexStringArrayList.size()){
                strBuffer.append("<driverphoto>");
                strBuffer.append(hexStringArrayList.get(i));
                strBuffer.append("</driverphoto>");
                i++;
            }
            strBuffer.append("</driverphotos>");
            //ADD MULTIPLE PHOTO TAGS ENDS

            strBuffer.append("</UploadChallanMultiplePhoto>");

        } catch (Exception e) {
        }

        return strBuffer.toString();
    }

2)これで、以下のコードを使用して Web サービスにアクセスできます。

public static String fetchAllActivatedRestForAddMultiplPhoto(String url) {

            String responseString = "";
            try {
                int TIMEOUT_MILLISEC = 20000;//100000 milisec = 10 seconds
                int SOCKET_TIMEOUT_MILISEC=20000;
                HttpParams httpParams = new BasicHttpParams();
                HttpConnectionParams.setConnectionTimeout(httpParams,TIMEOUT_MILLISEC);
                HttpConnectionParams.setSoTimeout(httpParams, SOCKET_TIMEOUT_MILISEC);
                HttpClient client = new DefaultHttpClient(httpParams);

                HttpPost request = new HttpPost(url);

                ByteArrayEntity entity = new ByteArrayEntity(Constant.addChallanXml.getBytes());
                request.setEntity(entity);

                HttpResponse response = client.execute(request);
                responseString = request(response); // here you get the response
                System.out.println(responseString); // this line will print the

                /*if (response != null
                        && response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    HttpEntity entity1 = response.getEntity();
                    responseString=EntityUtils.toString(entity1);
                }*/
                // response on Console

            } catch (Exception exception) {
                exception.printStackTrace();
            }
            return responseString;
        }

お役に立てば幸いです。

于 2013-11-12T05:42:55.260 に答える