如何从服务器发送和接收编码的字符串图像?

时间:2014-03-20 06:06:45

标签: android android-image

在我的应用程序中,我必须从图库中选择一个图像并将其设置为个人资料图片。为此,我已将图像编码为字符串并将其发送到服务器。从服务器接收响应时,它显示以下错误

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head>
<title>414 Request-URI Too Long</title>
</head><body>
<h1>Request-URI Too Long</h1>
<p>The requested URL's length exceeds the capacity limit for this server.<br /></p><hr>
<address>Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7 Server at localhost Port80</address></body></html>

要将图像转换为字符串,我使用了以下代码:

profileimage.buildDrawingCache();
            Bitmap bm = profileimage.getDrawingCache();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);

            byte[] b = baos.toByteArray();
            String encodedImage = null;
            encodedImage = Base64.encodeToString(b, Base64.NO_WRAP);

请帮我修复错误。

URL:

http://192.168.1.18/fl_api/registration/ghh/fgh/8d509c28896865f864f328f30f15721/5698742315/dfg@g.com/What was the name of your first best friend from childhood/dgg/-9j-4AAQSkZJRgABAQAAAQABAAD-2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH-2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH-wAARCACgAHgDASIAAhEBAxEB-8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL-8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6-8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL-8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6-9oADAMBAAIRAxEAPwD-AD-6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPs-4d-s9-Dfxvq4tG1jxhFaCFGLxXWkwsZhueaM3lz4ae2iSKKG5Yu0bNiCV3RSI4n5f4t-BDwb4D8eaD4d0LV-EF7o94uix6nNqVxpUurQXWpK8x8qKz022FqZIRiGxubSW8iZVluCRc20FfVXwE8J6rpeu+ItL1fStR0m83aXLDPcwPHHZtbx+JIHkguxvjEU807Lb3djKVcR+ZaSD7M8i-Pv7SkOrS-FnxO5YiTT7jS7XyGnAuprbStG0g211bNNHBK8mC-lGMSl7WK2+eYCS4n+QwmNxs8ynReLcqSo+6puLTm04qWiSu27p66qOjVz7PHZZh8HRmvq9KtKHLUU6KveHtE76N3i42Uox1Sk0pNxs-BfAnwu1Lx94otPDmlGQLJcxx32oMy+Rp9p5oE95KPJJfyogSkOUaWYxxCQF8j7j1H9h34fPbyJo-ivxjDeSwhbV7+40C7t7e6Z50jNzBb6HYS3aMRARbxzWrFi0f2vdJuj9j-Zy+ETeBfC-9qatam28QeKs6pf28iu50qyka5ksNGBRH-0hIPLkvwPKLX0ps7ljBafax75cyopktjKxjGXdnuGAeQERKkr2scsjRw-u7i7eSWOVWa3eSVbSYyP9JTnUrS92Xwdtno1zSummm+nwrTTdnznsadOClOLfNJacrejc2lF2utLXvrpPVqNl+I-jv4MeL-h3dSpr+m3J08SiK21uyD3Gj3RYMYyl2bWMwSShGdLW9itrsojyLC8OJq87XTbdhgPNuyAFLIN-UZXMXAJ24DHODnJJAr9xtbtYLu28qeC2g3yvCsF1PbobmNht-wBHnSU2d7FMHzG1xJbvJbgedBHOZSniWu-AjwBqdw7S+BtNguSytEun2l7payEtLK6S22iyxRO6RyEtKC4dNnkiGVGNbqq4vlqU3vZSgk01dW5d3LbXTZtbsx+qe05nSrwaTSamnFxbb0l8kul991K5+VcWi+aW2JckLlScpxICRg5iBwAMk47gdQTXunwu-Z61Hx5r2j6fqr6ho1hqV9ZWu5fsv9oPDPcKk9xFFNGUhhhti14s86mOSIJsV45Umr9GvBv7LGsQ+X-Y3w5itbhSJlvtQtFsmWO4YBkTUdXP2ib90HYpDKWKlGASGYtXv-gX4DXPgPxDYah4k1TSZbmMyS20Ok2Wu6mZbt4722tss2mQmziaCZpJUV32TpbeYFG27fOVWpKLVOm72Svu7q95JW0tZpu6WsLptGlPCU4K9aum1y3jbT7dld2vflTsndpvd6n47-Hb4A6Z8LfF1zY6Fea5e+FZJPK0zVdVewuLkzxIPtdnfT2FhZwJcwt88e21RZ7c+bCrNHdrH4mvhvStp3TXpkBK7VltwMhsZBa1ywI4XaCM4y4LBa-cjxB8HdB1fUdcfxNe397ZavdRyf2PfafoWkwu97fRpaBtP8RXNzqVwTfTwrZAolx9tktkhdZbhRJ5Nb-ss-A2x1ObUrqw16+tgJ7AeHrvWNWh0qPUM3UCRf2hYLp9zJqDTQyWcFs2vm0kvZIrWS08ySytzu6cowV6i+Bc19JqWl9OW8k7Xi9Oi-mchQpKU2lGWkbXjLk95u+nNdWtZcqk3pqm9fydsvBlpf3MFlZpq17e3EnlQ2VksdxdTStu8uO3ijs5JJ5MKW8uNGZgCABndW7pnwj1-Xbu707RfDnim8vLGRIb5HsxbRWEzAt5F-Pc2kMVnM0bRPHHcPGXBI3Bmj3frZpPgH4c+F4Zb-wn8P8ATNPnnhktEvZBbRs9xA-lrpl-dX09w1nePMluk8mq+TsvZUshK3iCGbShbeXSYkgivmg0FruIS2MOpvp+lxXxkuR5Udhbz3KSzSFrlT5aQ71llEchS5juFSqfIn79RtJpaq32ZvX3W7vTt9lu+xnKLatGFOOr95Q5nZJaq7td27Ne89bx1-JTXPgf4s8OW0N7q+j6jDZSxFzd209lqFvAwuBCRdy2KzraZLKE+0+Ukjb1hllZHUc3D4ItJ8JFLevK7xwxIstszGeVwsaiJLd5H37ZI1VfmMwCZ3gI-wCzN3ot7HK8VpCls9sqwzSPZyloFltTdr+-uz9mFrHHbyxzyj+0HW4kaCa1jCMg4cxfDjw4ssMOlaPZ61Nc+SdT8NaLox1iwiu0t3Z7kx2sSXJneaOV7iFYrdkRDIyWodkcuXW04QVlZtNyvzOztZNq1r303d+pNBQjGTq05Ts4++2lBJ8-xNq8b8trLmbaaScr3-K3TvhZq2tXVxa6Dpmu61LbxmSWHTdPvLuWJUmeFzItrply2NyBuUVl3MhUtGSxX7W+HtC0zVZHtvDvi628YzXUtrFPb6JeaRZ6vYQfZnln1RbNL4S3EKyNAJmimvXEisLKynIuACu2lg1KHNUqOLai01RcoyTb1i41UrWafW6v7zSMXOlJtwT5dFaM72lzJNNSp80fJPXlkrt8qb5T4UeHNdu9OF1rmlWkF1bXfn2ktnPDMNVNvYHT1ea8hLtImLmG3+xGC2uI1064t5F2XaTr5Z4M+Fmp-E39o74n+Pdagni8JeG-FDabp0M7Ryx614q0HTrXS7i5gaNrmOXTdOuNP+0SSLPGst19msmZpbbU7Qdro3jjRvh9oFkbzxQn9g6FaWuky6vdR7p7hN8xuIdNUAC61DXTbRsqwrdq8dw1ssAazeaT6JtPGGn32nz6-p11bRDWbdNRsLuSOZbfy5lKQme1lmTZNZRoJri2d4pRcK8DKskTRr+Y5HFTxeKlyN01CMVUafKnzxlZJrSTUWuXVxi3dq6PtM1xE6cKfLNQaavTTd4w1Tu+aUuRO-vSb5nK1248z1LTwxfML230nTbu+YFEMOnwNPGZJpCFZnitZ1htxMQGuGaNIlEru6qFlPSaV8C-F9-5v9o3GnaNbQuwnN1LJfXoKszi5j0uJpraNZpjcG1Frq9pdWsUllDdMJo1tz6b8H-ifa+O9Nbw5qgt9P8AFehB47+zsf

上传图片的代码:

public class PickGalleryImageActivity extends Activity implements
        OnClickListener {

    private static int RESULT_LOAD_IMAGE = 1;

    private ImageView profileimage = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        profileimage .setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {


        if (v.getId() == R.id.imageView) {

        Intent i = new Intent(Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

        startActivityForResult(i, RESULT_LOAD_IMAGE);
        }



    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();

             profileimage  = (ImageView) findViewById(R.id.imageView);
             profileimage .setImageBitmap(BitmapFactory.decodeFile(picturePath));

        }

}

服务器呼叫代码:

public class ServerCommunication {
    String msg;
    String url;
    static DefaultHttpClient httpclient = new DefaultHttpClient();

    public String makeServiceCall(String url, final Context context) {
        this.url = url;

        try {

            if (!isConnected(context)) {

                return url;
            }
            if (isConnected(context) == false) {
                Toast.makeText(context, "No Connection Available", 500).show();
            }


            URI uri = new URI(url.replace(" ", "%20"));
            Log.d("uri", url + "");

            HttpPost httppost = new HttpPost(uri);


            HttpParams httpParameters = httppost.getParams();

            int timeoutConnection = 100000;
            HttpConnectionParams.setConnectionTimeout(httpParameters,
                    timeoutConnection);

            int timeoutSocket = 100000;
            HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

            HttpResponse response = httpclient.execute(httppost);

            List<Cookie> cookies = httpclient.getCookieStore().getCookies();
            if (cookies.isEmpty()) {
                System.out.println("None");
            } else {
                for (int i = 0; i < cookies.size(); i++) {
                    System.out.println("- " + cookies.get(i).toString());
                }
            }
            int responseCode = response.getStatusLine().getStatusCode();
            /* Checking response */
            if (response != null) {
                msg = EntityUtils.toString(response.getEntity());

            }
            Log.d("serverResponse", msg);
            // Toast.makeText(getApplicationContext(), msg, 500).show();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return msg;

    }

    public static boolean isConnected(Context context) {
        ConnectivityManager connMgr = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected()) {
            return true;
        } else {

            return false;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

HttpClient httpclient = new DefaultHttpClient();
try{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("image", imageString));
nameValuePairs.add(new BasicNameValuePair("Country", "country name"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
}catch (ClientProtocolException e) {
 // TODO Auto-generated catch block
}

答案 1 :(得分:0)

使用Post方法将数据发送到服务器,当您将位图转换为ImageString时,该字符串对于URL为long。所以使用POST方法来请求服务器,这将起作用。

就像那样:它将Post请求作为josn发送,您可以使用自己的字符串实体

public static String callWebService(String value, String urlString) {
            String responseString = "";
    try {
        // make web service connection
        HttpPost request = new HttpPost(urlString);
        request.setHeader("Accept", "application/json");
        request.setHeader("Content-type", "application/json");
        // Build JSON string
        JSONStringer TestApp = new JSONStringer().object().key("imageString").value(value);
        StringEntity entity = new StringEntity(TestApp.toString());

        Log.d("****Parameter Input****", "Testing:" + TestApp);
        request.setEntity(entity);
        // Send request to WCF service
        DefaultHttpClient httpClient = new DefaultHttpClient();
        responseString = convertStreamToString(response.getEntity().getContent());  

    } catch (Exception e) {
        e.printStackTrace();
        responseString = e.getMessage();
    }

    return responseString;
}