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

Posted 生之须臾亦不负

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java UUID.randomUUID()自动生成主键作为Id或文件路径相关的知识,希望对你有一定的参考价值。

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或文件路径的主要内容,如果未能解决你的问题,请参考以下文章

JAVA JDK提供的一个自动生成主键 UUID.randomUUID()的方法 它永远都不会重复嘛??

什么是UUID,Java中怎么产生UUID

java.util.UUID.randomUUID().toString() 长度

UUID.randomUUID().toString() 的作用

UUID.randomUUID().toString() 的作用

UUID.randomUUID().toString()