发表于: 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,
评论