`

服务器端和客户端的上传代码

阅读更多

客户端:(android)

 

 private void uploadFile()
    {

      String uploadUrl = "http://IP:8081/dbcampus/UploadFileServlet";
      String end = "\r\n";
      String twoHyphens = "--";
      String boundary = "******";
      try
      {
        URL url = new URL(uploadUrl);
        HttpURLConnection httpURLConnection = (HttpURLConnection) url
            .openConnection();
        httpURLConnection.setDoInput(true);
        httpURLConnection.setDoOutput(true);
        httpURLConnection.setUseCaches(false);
        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
        httpURLConnection.setRequestProperty("Charset", "UTF-8");
        httpURLConnection.setRequestProperty("Content-Type",
            "multipart/form-data;boundary=" + boundary);

        DataOutputStream dos = new DataOutputStream(httpURLConnection
            .getOutputStream());
        dos.writeBytes(twoHyphens + boundary + end);
        dos
            .writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\""
                + srcPath.substring(srcPath.lastIndexOf("/") + 1)
                + "\"" + end);
        dos.writeBytes(end);

        FileInputStream fis = new FileInputStream(srcPath);
        byte[] buffer = new byte[8192]; // 8k
        int count = 0;
        while ((count = fis.read(buffer)) != -1)
        {
          dos.write(buffer, 0, count);

        }
        fis.close();

        dos.writeBytes(end);
        dos.writeBytes(twoHyphens + boundary + twoHyphens + end);
        dos.flush();

        InputStream is = httpURLConnection.getInputStream();
        InputStreamReader isr = new InputStreamReader(is, "utf-8");
        BufferedReader br = new BufferedReader(isr);
        String result = br.readLine();

        Toast.makeText(this, result, Toast.LENGTH_LONG).show();
        dos.close();
        is.close();

      } catch (Exception e)
      {
        e.printStackTrace();
        setTitle(e.getMessage());
      }

    }

 

 

服务器端:

 

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  try
  {
   request.setCharacterEncoding("UTF-8"); // 设置处理请求参数的编码格式
   response.setContentType("text/html;charset=UTF-8"); // 设置Content-Type字段值
   PrintWriter out = response.getWriter();
  
   // 下面的代码开始使用Commons-UploadFile组件处理上传的文件数据
   FileItemFactory factory = new DiskFileItemFactory(); // 建立FileItemFactory对象
   ServletFileUpload upload = new ServletFileUpload(factory);
   // 分析请求,并得到上传文件的FileItem对象
   List<FileItem> items = upload.parseRequest(request);
   // 从web.xml文件中的参数中得到上传文件的路径
   String uploadPath = request.getSession().getServletContext().getRealPath("/");
   System.out.println("uploadPath"+uploadPath);
   File file = new File(uploadPath+"img");
   if (!file.exists())
   {
    file.mkdir();
   }
   String filename = ""; // 上传文件保存到服务器的文件名
   InputStream is = null; // 当前上传文件的InputStream对象
    int lengthe=0;
   // 循环处理上传文件
   for (FileItem item : items)
   {
    // 处理普通的表单域
    if (item.isFormField())
    {
     if (item.getFieldName().equals("filename"))
     {
      // 如果新文件不为空,将其保存在filename中
      if (!item.getString().equals(""))
       filename = item.getString("UTF-8");
      System.out.println("filename1"+filename);
     }
    }
    // 处理上传文件
    else if (item.getName() != null && !item.getName().equals(""))
    {
     // 从客户端发送过来的上传文件路径中截取文件名
     filename = item.getName().substring(
       item.getName().lastIndexOf("\\") + 1);
     System.out.println("filename2"+filename);
     
     is = item.getInputStream(); // 得到上传文件的InputStream对象
     lengthe=is.available();//获得要上传文件的所附带流的大小
     System.out.println("lengthe:"+lengthe);
     

    }
   }
   // 将路径和上传文件名组合成完整的服务端路径
   String filename1 = uploadPath +"img"+ filename;
   // 如果服务器已经存在和上传文件同名的文件,则输出提示信息
   if (new File(filename1).exists())
   {
    new File(filename1).delete();
   }
  
   // 开始上传文件(采用字节流上传)(代码是可用的)
   if (!filename1.equals(""))
   {
    File file1=new File(uploadPath+"img",filename);
    
    // 用FileOutputStream打开服务端的上传文件
    FileOutputStream fos = new FileOutputStream(file1);
    byte[] buffer = new byte[8192]; // 每次读8K字节
    int count = 0;
    // 开始读取上传文件的字节,并将其输出到服务端的上传文件输出流中
    while ((count = is.read(buffer)) > 0)
    {
     fos.write(buffer, 0, count); // 向服务端文件写入字节流
     
    }
    fos.close(); // 关闭FileOutputStream对象
    is.close(); // InputStream对象
    out.println("文件上传成功!");
    
   }
   
  }
  catch (Exception e)
  {

  }

 }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics