发表于: 2017-11-07 22:16:23
1 601
今天做的事:
今天上午完成昨晚的遗留问题,改了一下数据库的字段属性,然后又把svn update fail的问题解决了,需要先update,然后merge一下,再commit就可以了。
下午听大佬你讲课了,受益匪浅!
今天解决的问题:
晚上才开始正经工作,小课堂的事也挺烦的,排来排去的。
就完成了一个接口,图片上传,其实就是抄代码,把之前的项目中的代码copy过来,跑通;因为用公司框架,都是封装好的,也没什么发挥空间,就这样吧,大概讲一下
//38 .图片上传
@Autowired
private ImgStorageUtil imgStorageUtil;
@RequestMapping(value = "/a/u/img/{module}", method = RequestMethod.POST)
public String uploadFile(HttpServletRequest request,
HttpServletResponse response, ModelMap model,
@RequestParam MultipartFile file, @PathVariable String module)
throws Exception {
log.info("hello upload " + module);
if (StringUtils.isBlank(module)) {
log.info("type is null");
}
int code = 0;
log.info(file.getOriginalFilename());
try {
String extend = FileUtil.getFileExtension(file.getOriginalFilename());
String fileName = UUID.randomUUID().toString() + "." + extend;
log.info("new name is " + fileName);
// String filePath = "/temp/" + fileName;
// String filePath = "/data/img/graship/" + module + "/" + fileName;
// String dirPath = "/data/img/graship/" + module;
String filePath = "D:\\image" + module + "\\" + fileName;
String dirPath = "D:\\image" + module;
// File dir = new File("/data/img/graship/" + module);
File dir = new File("D:\\image" + module);
if (dir.exists()) {
log.info("创建目录" + dirPath + "失败,目标目录已经存在");
} else {
//创建目录
if (dir.mkdirs()) {
log.info("创建目录" + dirPath + "成功!");
} else {
log.info("创建目录" + dirPath + "失败!");
}
}
File tempPic = new File(filePath);
file.transferTo(tempPic);
String url = this.imgStorageUtil.imgStorage(null, "graship/" + module + "/"
+ fileName, filePath);
log.info(module + " upload success ,and file name is " + fileName
+ "temp path is " + filePath + " access url is " + url);
tempPic.delete();
// log.info(file.getOriginalFilename() + " delete success ");
model.addAttribute("url", url);
model.addAttribute("code", 0);
return "/common/img";
} catch (Throwable t) {
t.printStackTrace();
log.error(t.getMessage());
model.addAttribute("code", -100000);
}
return "/common/success";
}
这个模块主要完成的功能就是:先获取上传的文件名,然后拼接一个随机的UUID,生成一个新的不重复的文件名,之后设定两个路径,一个是文件路径,一个是文件夹路径;接着创建文件夹(已存在就不新建),并且根据之前的文件路径生成一个临时MutipartFile文件,再把这个特殊文件转换成正常文件,然后通过公司的工具类上传到对应的云存储空间里面,返回相应的url,之后删除之前的临时MutipartFile文件,成功返回到jsp页面。
这里使用Spring的MutipartFile需要做相应的配置:
<!-- 文件上传-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="52428800"></property>
<!--<property name="uploadTempDir" value="temp"></property>-->
</bean>
然后公司的云存储空间的配置也要做:
<!-- 图片上传 -->
<bean id="imgStorageUtil" class="com.ptteng.common.storage.util.ImgStorageUtilJSImpl" init-method="initClientConfig">
<property name="akey" value="*****"></property>
<property name="skey" value="*****"></property>
<property name="bucketName" value="****"></property>
<property name="domain" value="*****"></property>
</bean>
之后就可以正常启动,本地成功实现,服务器还未测试。
再提一点,postman测试的时候如何上传文件:
文件上传,两个参数,一个是MutipartFile,在postman的body中选择file即可,对应的key值不要写错,一定试file,对应请求参数;然后另一个参数是
@PathVariable String module
在url中带上的,就是箭头指向的sad。
今天就完成了这个,了解了一下,视频部分的上传,获取时长,截图等等都是前端完成的,不需要后端操作,所以,解决了图片上传之后,后台的所有模块就完成了。
明天计划:解决两个遗留问题,然后有时间就写点前台内容。
问题:遗留两个问题;1.MutipartFile,需要了解一下,这个大概扫了一下,需要写个demo熟悉一下;2.对于文件流这块需要深入了解,这块概念一直很模糊;3.以及postman是如何通过form表单就把图片文件通过流的形式传输到我的接口中的,这中间是什么原理,需要细致的了解一下。
收获:完成图片上传接口。接口文档更新一下。
评论