码迷,mamicode.com
首页 > 编程语言 > 详细

java UUID.randomUUID()自动生成主键作为Id或文件路径

时间:2020-01-17 19:22:36      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:timestamp   div   同名   Servle   upload   exception   als   method   tac   

UUID.randomUUID().toString()是javaJDK(1.5以上的版本)提供的一个自动生成主键的方法,它生成的是以为32位的数字和字母组合的字符,中间还参杂着4个 - 符号。

作用:它可以作为我们表的标识列来增加,比序列增长更加方便。当然还可以用来拼接作为路径,或者图片的前缀名等等。

使用原因:

文件命名或者其他使用时间命名对于高并发会存在风险,使用UUID会规避风险,

import java.util.UUID;

UUID.randomUUID().toString();

 

1.作为主键ID:

public void sendSms(QuartzSmsSend quartzSmsSend) {
        UUID uuid = UUID.randomUUID();
        String id = uuid.toString().replace("-", "");
        quartzSmsSend.setId(id);
        quartzSmsSend.setCreateTime(new Timestamp(System.currentTimeMillis()));
        quartzSmsSendMapper.insertSelective(quartzSmsSend);
    }

2.作为文件路径:

/**
*
* uploadFile:上传发货文件. <br/>
*
* @author weijq
* @param excel
* @param model
* @param request
* @param response
* @return
* @since JDK 1.6
*/
@RequestMapping(value = "/uploadfile", method = RequestMethod.POST)
@ResponseBody
@NativeJson(true)
public Map<String,Object> uploadFile(@RequestParam(value = "excelFile", required = false) MultipartFile excel,
Model model, HttpServletRequest request, HttpServletResponse response) {
//当有多个文件上传时,如果用 MultipartFile 接口来接收,最好是用注解 。
//@RequestParam("inputName")指明该文件对应表单中的 input 标签的 name 属性。如果 name 都是同名的,可以使用 MultipartFile [] 文件数组来接收
   JsonResultThreadLocal.set(false);
Map<String, Object> ret = new HashMap<>();
if(excel==null){
LogUtil.info(MODULE, "发货导入文件不存在");
throw new BusinessException("发货导入文件不存在");
}

String fileId = "";
String oriFileName = excel.getOriginalFilename();
String[] fileNamea = oriFileName.split("\\.");
String fileName = fileNamea[0] + "_" + UUID.randomUUID();
String fileExtName = fileNamea[1];

try {
fileId = FileUtil.saveFile(excel.getBytes(), fileName, fileExtName);
ret.put("fileId", fileId);
ret.put("fileName", fileName);
ret.put("fileExtName", fileExtName);
ret.put("success", true);

} catch (IOException e) {
LogUtil.error(MODULE, "文件保存失败",e);
ret.put("success", false);
}

return ret;

}

 

针对Controller,解析用了网上其他队友的描述:https://www.jianshu.com/p/5fc5b10fc8dc

在 Controller 中,有几个地方是需要我们注意的:

  • 当有多个文件上传时,如果用 MultipartFile 接口来接收,最好是用注解 @RequestParam("inputName") 指明该文件对应表单中的 input 标签的 name 属性。如果 name 都是同名的,可以使用 MultipartFile [] 文件数组来接收。
  • 注意看处理显示图片和下载图片的请求映射中,我用 {fileName}.{suffix} 这段代码将图片名和图片的后缀区分开,因为 GET 方式的 URL 请求地址中的 "." 点号会被当作通配符处理掉,有多种方式可以解决。我这种方式是一种,你也可以用 "." 转义字符来避免其通配符的作用。
  • 处理图片显示和图片下载的请求区别在于:是否设置了下载响应头 response.setHeader("Content-Disposition","attachment;fileName=" + "headPic.jpg"); 当设置了该响应头时,使用 response 输出流将会被当作附件提供给客户端下载,反之就是将流中的内容输出到页面上。

Service 层中要注意的:

  • 我们在向数据库存入图片的路径记录时,最好是将文件名和后缀名也一并记录。这里有两种方案供参考:(1)将文件名和后缀名存入一个字段(例子中用到的方案);(2)文件名存入一个字段,后缀名存入一个字段,方便后期筛选不同的文件格式,可以对图片文件进行读取和分类查询分析等操作。
  • 上传的原始文件名存在命名冲突的问题,为了避免文件名冲突被覆盖,我们可以使用 UUID 来生成唯一的文件名,如果有时候业务需要保存原始文件名的话,可以考虑在数据库表中再增加一个字段用于持久化原始的文件名。

java UUID.randomUUID()自动生成主键作为Id或文件路径

标签:timestamp   div   同名   Servle   upload   exception   als   method   tac   

原文地址:https://www.cnblogs.com/xuhk1819/p/12207052.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!