发表于: 2017-11-07 22:16:23

1 600


今天做的事:


今天上午完成昨晚的遗留问题,改了一下数据库的字段属性,然后又把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表单就把图片文件通过流的形式传输到我的接口中的,这中间是什么原理,需要细致的了解一下。


收获:完成图片上传接口。接口文档更新一下。




返回列表 返回列表
评论

    分享到