首页 > 其他分享 >被上传文件于后端的命名策略

被上传文件于后端的命名策略

时间:2024-10-29 23:19:46浏览次数:3  
标签:文件 UUID 文件名 端的 示例 命名 上传 String

上一篇博客我们了解了前端上传的文件资源应该存放在后端项目中的什么位置,那么随之而来的另一个问题——我们应该如何为上传的文件命名呢?往往直接采用原文件名并不稳妥,会导致命名冲突、文件冲突、数据库管理冲突等多种问题,下面我介绍一些常用的文件命名策略。

在管理前端上传的文件时,文件命名策略非常重要。一个好的命名策略可以防止文件重名、便于管理和检索。以下是常见的文件命名策略:

1. UUID(通用唯一识别码)

使用 UUID(如 UUID.randomUUID().toString())来生成一个唯一的文件名。这样可以保证文件名不会重复,非常适合大多数场景。

示例:

String fileName = UUID.randomUUID().toString() + "." + fileExtension;

优点:

  • 文件名唯一,避免了重名冲突。

缺点:

  • 文件名较长,不便于人工识别。

2. 时间戳 + 随机数

将当前时间戳和随机数组合成文件名,如 System.currentTimeMillis()LocalDateTime.now()。加上随机数(如 Random 类生成的随机数字),可以进一步降低文件名冲突的风险。

示例:

String fileName = System.currentTimeMillis() + "_" + new Random().nextInt(1000) + "." + fileExtension;

优点:

  • 相对简洁,文件名冲突的可能性小。

缺点:

  • 在高并发场景下可能出现冲突。

3. 业务相关前缀 + UUID/时间戳

根据业务需求添加前缀,例如用户 ID、业务类型、日期等,再加上 UUID 或时间戳。这种方式便于根据文件名识别来源或用途,方便日后查找和管理。

示例:

String fileName = "user_" + userId + "_" + System.currentTimeMillis() + "." + fileExtension;

优点:

  • 文件名包含业务信息,便于分类和管理。

缺点:

  • 文件名可能较长,不适合所有情况。

4. 哈希文件名

将文件内容的哈希值(如 MD5SHA-256)作为文件名。此方法不仅确保文件名唯一,还可以避免重复存储相同内容的文件(例如上传相同的图片多次)。

示例:

String fileName = DigestUtils.md5DigestAsHex(fileContent) + "." + fileExtension;

优点:

  • 文件内容唯一标识,适合对文件去重。

缺点:

  • 需要读取文件内容并计算哈希值,稍微增加了计算开销。

5. 原始文件名 + UUID/时间戳

保留用户上传的文件原始名称的一部分,加上 UUID 或时间戳作为后缀。这种方式在需要保留文件部分原始信息的情况下比较有用。

示例:

String originalFileName = file.getOriginalFilename();
String fileName = originalFileName.substring(0, originalFileName.lastIndexOf('.'))
              + "_" + UUID.randomUUID().toString() + "." + fileExtension;

优点:

  • 保留了部分文件原始信息,便于识别。

缺点:

  • 原始文件名可能包含特殊字符,需要进一步处理。

总结建议

  • 常规文件存储: 使用 UUID时间戳 + 随机数 命名。
  • 需要去重的场景: 使用文件内容的哈希值命名。
  • 需要业务分类: 使用业务相关前缀 + UUID/时间戳 命名。

标签:文件,UUID,文件名,端的,示例,命名,上传,String
From: https://blog.csdn.net/weixin_73334344/article/details/143352337

相关文章

  • c#使用FluentFTP来做FTP的上传下载
    最近由于项目需要,做了个FTP的上传下载上传///<summary>///上传共享文件///</summary>///<paramname="server">服务器信息</param>///<paramname="files">文件列表</param>publicstaticvoidUploadFtpFiles(FileServerConfigserver,......
  • springboot限制上传文件大小,nginx出现413
    spring.servlet.multipart.enabled=true:启用文件上传功能。spring.servlet.multipart.max-file-size=2MB:设置单个文件的最大大小为2MB。spring.servlet.multipart.max-request-size=10MB:设置包含所有文件的请求的最大大小为10MB。 如果使用了nginx,需要在配置设置到http{}......
  • 赤峰至曹妃甸公路-护栏碰撞监测终端的关键支撑
        ​    ​​在赤峰至曹妃甸公路工程中,护栏碰撞监测终端扮演着至关重要的角色,为这段公路的安全运营提供了坚实保障,其作用在多个方面得以彰显。    ​    ​一、实时监测与快速响应    ​    ​这段公路作为交通要道,车流量较大,各类交通状况复杂多......
  • 客户端和服务端的区别
    客户端和服务端是网络通信的核心元素,具有不同的职责和工作方式。它们的区别主要有:1.架构和职责;2.通信模型和流程;3.性能和资源要求;4.部署环境和维护;5.安全性和隐私;6.开发和测试。本文深入探讨它们在架构、性能要求、安全性、开发和维护方面的差异,帮助理解这两种网络实体的角色和重......
  • 【漏洞复现】时空智友ERP系统uploadStudioFile任意文件上传漏洞
    免责声明请勿使用本文中提到的技术进行非法测试或行为。使用本文中提供的信息或工具所造成的任何后果和损失由使用者自行承担,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。一、简介时空智友ERP系统是一款基于云计算和大数据的企业资源计划管理系统,旨在......
  • 新接口0day全程云DocumentDocService.asmx接口存在任意文件上传漏洞
     0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用......
  • npm 包的命名空间介绍,以及@typescript-eslint/typescript-eslint
    npm包的命名空间是一个重要的概念,用于组织和管理相关的包。通过命名空间,开发者可以避免命名冲突、增强包的可读性和可维护性。以下是关于npm命名空间的详细介绍,并以@typescript-eslint作为示例。1.命名空间的结构命名空间的格式为@scope/package-name:@scope:这是......
  • ctfshow(151->154)--文件上传漏洞--.user.ini
    Web151进入界面:审计:提示是前台校验。存在图片上传。思路:先编写一个一句话木马文件://shell.php<?php@eval($_POST[1]);?>既然是前端校验,我们查看页面源代码找到相关的校验内容:说明只允许上传.png后缀的文件。我们修改代码为允许上传.php文件:然后上传一句话......
  • 基于node.js+vue基于Android的新闻移动客户端的设计与实现前(开题+程序+论文)计算机毕业
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景在当今数字化时代,新闻传播方式发生了巨大变革。关于新闻移动客户端的研究,现有研究主要以新闻内容的推送、展示效果以及用户界面设计等为主。然而专门针对基......
  • 《聆听音乐》上传资源提示DLL文件丢失:修复步骤与技巧详解
    当您在尝试使用“聆听音乐”(或其他类似的应用程序)上传资源时遇到丢失DLL文件的问题,这通常意味着应用程序缺少了运行所必需的某些系统文件。解决这类问题的一般步骤如下:确认错误信息:首先,请仔细阅读错误提示中的具体信息,了解是哪个具体的DLL文件丢失或损坏。安装DLL修复工具:......