android上传图片至服务器

本实例实现了android上传手机图片至服务器,服务器进行保存

服务器servlet代码(需要jar包有:commons-fileupload-1.2.2.jar, commons-io-2.0.1.jar, standard.jar)
         public void doGet(HttpServletRequest request, HttpServletResponse response)
                         throws ServletException, IOException {
                 try {
                         System.out.println("IP:" + request.getRemoteAddr());
                         // 1、创建工厂类:DiskFileItemFactory
                         DiskFileItemFactory facotry = new DiskFileItemFactory();
                         String tempDir = getServletContext().getRealPath("/WEB-INF/temp");
                         facotry.setRepository(new File(tempDir));//设置临时文件存放目录
                         // 2、创建核心解析类:ServletFileUpload
                         ServletFileUpload upload = new ServletFileUpload(facotry);
                         upload.setHeaderEncoding("UTF-8");// 解决上传的文件名乱码
                         upload.setFileSizeMax(1024 * 1024 * 1024);// 单个文件上传最大值是1M
                         upload.setSizeMax(2048 * 1024 * 1024);//文件上传的总大小限制
  
                         // 3、判断用户的表单提交方式是不是multipart/form-data
                         boolean bb = upload.isMultipartContent(request);
                         if (!bb) {
                                 return;
                         }
                         // 4、是:解析request对象的正文内容List<FileItem>
                         List<FileItem> items = upload.parseRequest(request);
                         String storePath = getServletContext().getRealPath(
                                         "/WEB-INF/upload");// 上传的文件的存放目录
                         for (FileItem item : items) {
                                 if (item.isFormField()) {
                                         // 5、判断是否是普通表单:打印看看
                                         String fieldName = item.getFieldName();// 请求参数名
                                         String fieldValue = item.getString("UTF-8");// 请求参数值
                                         System.out.println(fieldName + "=" + fieldValue);
                                 } else {
                                         // 6、上传表单:得到输入流,处理上传:保存到服务器的某个目录中
                                         String fileName = item.getName();// 得到上传文件的名称 C:\Documents and Settings\shc\桌面\a.txt 
                                         //解决用户没有选择文件上传的情况
                                         if(fileName==null||fileName.trim().equals("")){
                                                 continue;
                                         }
                                         fileName = fileName
                                                         .substring(fileName.lastIndexOf("\\") + 1);
                                         String newFileName = UUIDUtil.getUUID() + "_" + fileName;
                                         System.out.println("上传的文件名是:" + fileName);
                                         InputStream in = item.getInputStream();
                                         String savePath = makeDir(storePath, fileName) + "\\"
                                                         + newFileName;
                                         OutputStream out = new FileOutputStream(savePath);
                                         byte b[] = new byte[1024];
                                         int len = -1;
                                         while ((len = in.read(b)) != -1) {
                                                 out.write(b, 0, len);
                                         }
                                         in.close();
                                         out.close();
                                         item.delete();//删除临时文件
                                 }
                         }
                 }catch(FileUploadBase.FileSizeLimitExceededException e){
                         request.setAttribute("message", "单个文件大小不能超出5M");
                         request.getRequestDispatcher("/message.jsp").forward(request,
                                         response);
                 }catch(FileUploadBase.SizeLimitExceededException e){
                         request.setAttribute("message", "总文件大小不能超出7M");
                         request.getRequestDispatcher("/message.jsp").forward(request,
                                         response);
         }catch (Exception e) {
                         e.printStackTrace();
                         request.setAttribute("message", "上传失败");
                         request.getRequestDispatcher("/message.jsp").forward(request,
                                         response);
                 }
         }
  
         // WEB-INF/upload/1/3 打散存储目录
         private String makeDir(String storePath, String fileName) {
                 int hashCode = fileName.hashCode();// 得到文件名的hashcode码
                 int dir1 = hashCode & 0xf;// 取hashCode的低4位 0~15
                 int dir2 = (hashCode & 0xf0) >> 4;// 取hashCode的高4位 0~15
                 String path = storePath + "\\" + dir1 + "\\" + dir2;
                 File file = new File(path);
                 if (!file.exists())
                         file.mkdirs();
                 return path;
         }
  
         public void doPost(HttpServletRequest request, HttpServletResponse response)
                         throws ServletException, IOException {
                 doGet(request, response);
         }

服务端工程.rar

2012-9-20 16:46 上传

点击文件名下载附件

下载积分: e币 -2 元

Android客户端.rar

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值