Android-向服务器发送图片

Android 客户端

public class PhotoUpload extends Activity {
 
    private String newName = "image.jpg";
 
    private String uploadFile = "/sdcard/image.JPG";
 
    private String actionUrl = "http://192.168.0.71:8086/HelloWord/myForm";
 
    private TextView mText1;
 
    private TextView mText2;
 
    private Button mButton;
 

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

        mText1 = (TextView) findViewById(R.id.myText2);
 
        //"文件路径:\n"+
 
        mText1.setText(uploadFile);
 
        mText2 = (TextView) findViewById(R.id.myText3);
 
        //"上传网址:\n"+
 
        mText2.setText(actionUrl);
 
        /* 设置mButton的onClick事件处理 */    
        mButton = (Button) findViewById(R.id.myButton);
 
        mButton.setOnClickListener(new View.OnClickListener()
 
        {
 
          public void onClick(View v)
 
          {
 
            uploadFile();
 
          }
 
        });
 
      }
 

      /* 上传文件至Server的方法 */
 
      private void uploadFile()
 
      {
 
        String end = "\r\n";
 
        String twoHyphens = "--";
 
        String boundary = "*****";
 
        try
 
        {
 
          URL url =new URL(actionUrl);
 
          HttpURLConnection con=(HttpURLConnection)url.openConnection();
 
          /* 允许Input、Output,不使用Cache */
 
          con.setDoInput(true);
 
          con.setDoOutput(true);
 
          con.setUseCaches(false);
 
          /* 设置传送的method=POST */
 
          con.setRequestMethod("POST");
 
          /* setRequestProperty */
 
          con.setRequestProperty("Connection", "Keep-Alive");
 
          con.setRequestProperty("Charset", "UTF-8");
 
          con.setRequestProperty("Content-Type",
 
                             "multipart/form-data;boundary="+boundary);
 
          /* 设置DataOutputStream */
 
          DataOutputStream ds = 
            new DataOutputStream(con.getOutputStream());
 
          ds.writeBytes(twoHyphens + boundary + end);
 
          ds.writeBytes("Content-Disposition: form-data; " +
 
                        "name=\"file1\";filename=\"" +
 
                        newName +"\"" + end);
 
          ds.writeBytes(end);   


          /* 取得文件的FileInputStream */
 
          FileInputStream fStream = new FileInputStream(uploadFile);
 
          /* 设置每次写入1024bytes */
 
          int bufferSize = 1024;
 
          byte[] buffer = new byte[bufferSize];
 

          int length = -1;
 
          /* 从文件读取数据至缓冲区 */
 
          while((length = fStream.read(buffer)) != -1)
 
          {
 
            /* 将资料写入DataOutputStream中 */
 
            ds.write(buffer, 0, length);
 
          }
 
          ds.writeBytes(end);
 
          ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
 

          /* close streams */
 
          fStream.close();
 
          ds.flush();
 

          /* 取得Response内容 */
 
          InputStream is = con.getInputStream();
 
          int ch;
 
          StringBuffer b =new StringBuffer();
 
          while( ( ch = is.read() ) != -1 )
 
          {
 
            b.append( (char)ch );
 
          }
 
          /* 将Response显示于Dialog */
 
          showDialog("上传成功"+b.toString().trim());
 
          /* 关闭DataOutputStream */
 
          ds.close();
 
        }
 
        catch(Exception e)
 
        {
 
          showDialog("上传失败"+e);
 
        }
 
      }
 

      /* 显示Dialog的method */
 
      private void showDialog(String mess)
 
      {
 
        new AlertDialog.Builder(PhotoUpload.this).setTitle("Message")
 
         .setMessage(mess)
 
         .setNegativeButton("确定",new DialogInterface.OnClickListener()
 
         {
 
           public void onClick(DialogInterface dialog, int which)
 
           {          
           }
 
         })
 
         .show();
 
      }
 
    }


 

-------------------

服务端

服务器servlet代码

public void doPost(HttpServletRequest request, HttpServletResponse response)  
 
           throws ServletException, IOException {  
 
            
 
           String temp=request.getSession().getServletContext().getRealPath("/")+"temp";   //临时目录
 
           System.out.println("temp="+temp);
 
           String loadpath=request.getSession().getServletContext().getRealPath("/")+"Image"; //上传文件存放目录
 
           System.out.println("loadpath="+loadpath);
 
           DiskFileUpload fu = new DiskFileUpload();
 
           fu.setSizeMax(1*1024*1024);   // 设置允许用户上传文件大小,单位:字节 
           fu.setSizeThreshold(4096);   // 设置最多只允许在内存中存储的数据,单位:字节 
           fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录 
           
 
           //开始读取上传信息 
           int index=0;
 
           List fileItems = null;
 
                
                         
 
                                try {
 
                                        fileItems = fu.parseRequest(request);
 
                                         System.out.println("fileItems="+fileItems);
 
                                } catch (Exception e) {
 
                                        e.printStackTrace();
 
                                }
 
                         
 
                
           Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件
 
           while (iter.hasNext())
 
           {
 
               FileItem item = (FileItem)iter.next();// 忽略其他不是文件域的所有表单信息
 
               if (!item.isFormField())
 
               {
 
                   String name = item.getName();//获取上传文件名,包括路径
 
                   name=name.substring(name.lastIndexOf("\\")+1);//从全路径中提取文件名
 
                   long size = item.getSize();
 
                   if((name==null||name.equals("")) && size==0) 
                         continue; 
                   int point = name.indexOf(".");
 
                   name=(new Date()).getTime()+name.substring(point,name.length())+index;
 
                   index++;
 
                   File fNew= new File(loadpath, name);
 
                   try {
 
                                        item.write(fNew);
 
                                } catch (Exception e) {
 
                                        // TODO Auto-generated catch block
 
                                        e.printStackTrace();
 
                                }
 
                   
                  
 
               }
 
               else //取出不是文件域的所有表单信息
 
               {
 
                   String fieldvalue = item.getString();
 
            //如果包含中文应写为:(转为UTF-8编码)
 
                   //String fieldvalue = new String(item.getString().getBytes(),"UTF-8");
 
               }
 
           }
 
           String text1="11";
 
           response.sendRedirect("result.jsp?text1=" + text1);
 
    }  


 

你可能感兴趣的:(Android,服务器,string,exception,dialog,buffer,button)