如何将图像从android发送到servlet然后存储它

时间:2011-06-10 18:05:13

标签: java android image servlets

我正在尝试通过http将照片发送到我的服务器。所以我将图像转换为字节,然后我将其作为名称值对发送。这是我下面的代码。现在我的麻烦是服务器端,我如何从收到的字节串重新创建和存储图像

我也在使用java servlets

Android上的代码

ByteArrayOutputStream baos = new ByteArrayOutputStream();
pinnedV.getPhoto().compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();

List<NameValuePair> params = new ArrayList<NameValuePair>(2);
params.add(new BasicNameValuePair("photo",new String(b)));

HttpClient httpclient = new DefaultHttpClient();  
    HttpPost request = new HttpPost(URL);

    try {
        request.setEntity(new UrlEncodedFormEntity(params));
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    ResponseHandler<String> handler = new BasicResponseHandler();  
     try {  
         result = httpclient.execute(request, handler);  
     } catch (ClientProtocolException e) {  
         e.printStackTrace();  
     } catch (IOException e) {  
         e.printStackTrace();  
    }  

服务器上的代码

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String fromClientphoto= request.getParameter("photo");
byte[] b = fromClientphoto.getBytes();

FileOutputStream fos = new FileOutputStream("D:\\img.png");
     fos.write(b);
     fos.close(); 
}

以上代码会写入一个文件但不会作为图像打开。也就是这个byte[] b = fromClientphoto.getBytes();正确的方式转换回与Android手机上相同的字节?任何想法?

3 个答案:

答案 0 :(得分:1)

请看这个链接:

Image transfer to the android from java over sockets

它解释了如何使用java类。

它可能对你有帮助。

答案 1 :(得分:0)

不要打扰工具包图片,只需将内容写入文件..

你可以将图像发布到android之外的Servlet吗?设置一个通过基本HTML表单执行相同操作的虚拟页面,将问题分解为越来越小的部分,直到找出哪个部分导致问题...

答案 2 :(得分:0)

您不应将文件(即图片)作为常规名称 - 值参数从设备发送,并使用request.getParameter(name);进行阅读。

相反:

  • 在Android方面,使用MultipartEntity(请参阅other questions)。它已经是httpclient的一部分。
  • 在服务器端,您可以找到有用的apache-fileupload(或其他可帮助您阅读servlet中收到的多部分内容的库)