发表于: 2017-08-07 00:05:34

4 999


今天完成的事情:

       完成头像的上传到腾讯云,登录后显示头像   

       登录前

       

       登陆后 

       

       点击凡尘进入个人信息页面,目前还比较简单只有图片上传功能,这个请求名也得改一改

        

        别的师兄这个任务写的都比较少,我就把代码放上来把,希望可以帮助到师弟们

        前端上传页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<form name="serForm" action="/fileUpload" method="post"  enctype="multipart/form-data">
   <h1>采用流的方式上传文件</h1>
   <input type="file" name="file">
   <input type="submit" value="upload"/>
</form>

<form name="Form2" action="fileUpload2" method="post"  enctype="multipart/form-data">
   <h1>采用multipart提供的file.transfer方法上传文件</h1>
   <input type="file" name="file">
   <input type="submit" value="upload"/>
</form>

<form name="Form2" action="springUpload" method="post"  enctype="multipart/form-data">
   <h1>使用spring mvc提供的类的方法上传文件</h1>
   <input type="file" name="file">
   <input type="submit" value="upload"/>
</form>

         我在后端读取前端上传的数据这块卡一上午,后google到了一份不错的源码:地址http://www.cnblogs.com/fjsnail/p/3491033.html

         我在其基础上添加代码得到了以下的代码,我只修改了方法fileUpload2 :

@Controller
public class UpLoadController {

@Autowired
   TencentYunService tencentYunService;

   @Autowired
   CategoryMapper categoryMapper;
   /*
     * 通过流的方式上传文件
     * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
     */

   @RequestMapping("fileUpload")
    public String fileUpload(@RequestParam("file") CommonsMultipartFile file) throws IOException {

//用来检测程序运行时间
       long startTime = System.currentTimeMillis();
       System.out.println("fileName:" + file.getOriginalFilename());

       try {
//获取输出流
           OutputStream os = new FileOutputStream("E:/" + new Date().getTime() + file.getOriginalFilename());
           //获取输入流 CommonsMultipartFile 中可以直接得到文件的流
           InputStream is = file.getInputStream();
           int temp;
           //一个一个字节的读取并写入
           while ((temp = is.read()) != (-1)) {
os.write(temp);
           }
os.flush();
           os.close();
           is.close();

       } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
           e.printStackTrace();
       }
long endTime = System.currentTimeMillis();
       System.out.println("方法一的运行时间:" + String.valueOf(endTime - startTime) + "ms");
       return "none";
   }

@RequestMapping("fileUpload2")
public String fileUpload2(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException {
long startTime = System.currentTimeMillis();
       /**输出上传时的名字含后缀名*/
       System.out.println("fileName:" + file.getOriginalFilename());
       /**在临时存放在本地的地址*/
       String path = "E:/" + file.getOriginalFilename();
       File newFile = new File(path);
       /**直接把CommonsMultipartFile传入的文件写入到上面设置的路径里*/
       file.transferTo(newFile);
       try {
           /**密匙*/
           String secretKey = "12345678";
           /**从cookie中获取加密后的邮箱*/
           Cookie cokEmail = CookieUtil.getCookieByName(request, "secretEmail");
           if (cokEmail != null) {
               /**把email的数据取出*/
               String secretEmail = cokEmail.getValue();
               /**此时是输出的是加密的邮箱*/
               System.out.println(secretEmail);
               /**解密*/
               String email = DesUtil.decryption(secretEmail, secretKey);
               System.out.println(email);
               /**转发到腾讯云,并返回外链*/
               String pth = tencentYunService.upDate(path);
               System.out.println("地址..." + pth);
               Register register = new Register();
               register.setEmail(email);
               register.setPortraitpath(pth);
               /**根据邮箱更新头像字段*/
               categoryMapper.setPortrait(register);

               long endTime = System.currentTimeMillis();
               System.out.println("方法二的运行时间:" + String.valueOf(endTime - startTime) + "ms");
           }

       } catch (Exception e) {
            System.out.println("上传头像出错....");
       }
         return "none";
   }

/*
    *采用spring提供的上传文件的方法
    */
   @RequestMapping("springUpload")
public String springUpload(HttpServletRequest request) throws IllegalStateException, IOException {
long startTime = System.currentTimeMillis();
       //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)
       CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
       //检查form中是否有enctype="multipart/form-data"
       if (multipartResolver.isMultipart(request)) {
//将request变成多部分request
           MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
           //获取multiRequest 中所有的文件名
           Iterator iter = multiRequest.getFileNames();

           while (iter.hasNext()) {
//一次遍历所有文件
               MultipartFile file = multiRequest.getFile(iter.next().toString());
               if (file != null) {
String path = "E:/springUpload" + file.getOriginalFilename();
                   //上传
                   file.transferTo(new File(path));
               }

}

}
long endTime = System.currentTimeMillis();
       System.out.println("方法三的运行时间:" + String.valueOf(endTime - startTime) + "ms");
       return "none";
   }
}

经过测试这三种方法中字节流的最慢,另外两个都差不多7ms左右


然后结合之前写的腾讯云接口把图片上传到云服务器,并且把链接添加到数据库,然后登录的时候添加到Cookie中,在控制器中读取该数据,在前端页面添加

实现了登录后显示头像的功能!!!


明天我会再整理一下写到博客上去,博客地址wudihui.github.io感兴趣的师弟可以去看看,

(我的博客水平不高,主要是写一些笔记,但是我会慢慢完善的,听说博客写得好,好找工作....)

不知道这算不算广告植入


遇到的困难:

       感觉自己写的代码太臃肿,好多地方可以是同一个代码完成的非要调用两次,但是水平有限也不知道怎么改,

       遇到好多的error,但是都没有截图,好多都忘记了,有一个是头像链接没有加密但是读取的时候却加密了,报了一          个很奇怪的异常,最后把所有改的的代码看了一遍,打断点测试,才找到

收获:

      学会腾讯云SDK的使用


明天的计划:

      继续任务7,


返回列表 返回列表
评论

    分享到