发表于: 2017-09-29 19:35:12

1 668


今天完成的事情:

花了些时间完成了图片上传功能,但是图片上传成功之后把它变成头像这点卡了一会,因为本地的图片地址是无法在jsp页面显示的。后来想到了一种简单的解决办法,就是上传图片的同时copy一份到项目的webapp下,这样就可以在项目里引用了,代码如下

controller

@RequestMapping(value = "/register",method = RequestMethod.POST)
public String register(User user, Integer message,HttpServletRequest request){
HttpSession session = request.getSession();
   Integer verify= (Integer) session.getAttribute("verify");
   String pic= (String) session.getAttribute("picture");
   logger.info("verify="+verify);
   logger.info("message="+message);
   if (message.equals(verify)&&message != null){
User user1=new User();
       user1.setUser(user.getUser());
       String md5= MD5Util.stringToMD5(user.getUser()+user.getPassword());
       user1.setPassword(md5);
       user1.setMobile(user.getMobile());
       user1.setEmail(user.getEmail());
       user1.setPicture("../picture/"+pic);
       userService.sendEmail(user.getEmail());
       userService.insert(user1);
       return "success";
   }else{
return "fail";
   }
}
@RequestMapping(value = "/pic",method = RequestMethod.GET)
public String aa(){
return "pic";
   }
@RequestMapping(value = "/pic",method = RequestMethod.POST)
public String doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
       response.setCharacterEncoding("utf-8");
       //1、创建一个DiskFileItemFactory工厂
       DiskFileItemFactory factory = new DiskFileItemFactory();
       //2、创建一个文件上传解析器
       ServletFileUpload upload = new ServletFileUpload(factory);
       //解决上传文件名的中文乱码
       upload.setHeaderEncoding("UTF-8");
       factory.setSizeThreshold(1024 * 500);//设置内存的临界值为500K
       File linshi = new File("F:\\linshi");//当超过500K的时候,存到一个临时文件夹中
       factory.setRepository(linshi);
       upload.setSizeMax(1024 * 1024 * 5);//设置上传的文件总的大小不能超过5M
       try {
// 1. 得到 FileItem 的集合 items
           List<FileItem> /* FileItem */items = upload.parseRequest(request);

           // 2. 遍历 items:
           for (FileItem item : items) {
// 若是文件域则把文件保存到 e:\\files 目录下.
                   String fileName = item.getName();
                   long sizeInBytes = item.getSize();
                   System.out.println(fileName);
                   System.out.println(sizeInBytes);
                   HttpSession session = request.getSession();
                   session.setAttribute("picture",fileName);
                   InputStream in = item.getInputStream();
                   byte[] buffer = new byte[1024];
                   int len = 0;

                   fileName = "c:\\Users\\HP\\IdeaProjects\\mytask\\src\\main\\webapp\\picture\\" + fileName;//文件最终上传的位置
                   System.out.println("这是什么"+fileName);
                   OutputStream out = new FileOutputStream(fileName);
                   while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
                   }
userService.qingniu(fileName);
                   out.close();
                   in.close();
               }
} catch (FileUploadException e) {
e.printStackTrace();
       }
return "regist";
   }

上传图片的controller要单独写一个jsp页面,因为涉及到了form表单的提交,一个jsp没法提交两次,或者可以我还不会弄。。

jsp

<html>
<head>
   <title>上传图片</title>
</head>
<body>
<form action="pic" method="post" enctype="multipart/form-data">
   注册之前先给自己传个图片吧:<input type="file" name="fileupload"/>
   <input type="submit" class="btn_zhuce" value="上传"/>
</form>
</body>
</html>

实现类

public void qingniu(String file){
System.out.println("Enter StudentServiceImpl.putPicture()");
       //用来存文件名
       String key = null;
       try {

           String newURL = file.replaceAll("\\\\", "/");
           System.out.println("转义后的文件路径:" + newURL);


           //构造一个带指定Zone对象的配置类
           Configuration cfg = new Configuration(Zone.zone2());
//...其他参数参考类注释

           UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传

//如果是Windows情况下,格式是 D:\\qiniu\\test.png
//        String localFilePath = "D:\\image\\1.jsp";
//默认不指定key的情况下,以文件内容的hash值作为文件名
           key = file;

           Auth auth = Auth.create("/", "/");
           String upToken = auth.uploadToken("yaoyuan");

           try {
Response response = uploadManager.put(newURL, key, upToken);
               //解析上传成功的结果
               DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
               System.out.println(putRet.key);
               System.out.println(putRet.hash);
           } catch (QiniuException ex) {
Response r = ex.response;
               System.err.println(r.toString());
               try {
System.err.println(r.bodyString());
               } catch (QiniuException ex2) {
//ignore
               }
}
} catch (Exception e) {
e.printStackTrace();
       }
}

然后是这样的

提交之后,再注册

短信和email功能都集成在这里了,注册完成之后可以看一下list

图片都显示了。也可以用七牛云上的图片做链接存到数据库里,再扔给前端做页面,但是在jsp里我不会这样显示图片,就搁置了。


返回列表 返回列表
评论

    分享到