【Spring Boot深度实践】打造高效安全的文件上传服务:从JWT鉴权到持久化存储


        在当前数字化时代,文件上传功能是各类Web应用中不可或缺的一部分。本文将为您展示如何利用Spring Boot框架及其优秀生态构建一个优雅且安全的文件上传服务——`UploadFileServiceImp`。此服务不仅实现了批量处理上传请求、确保文件安全存储,还通过JWT令牌提取用户ID,并将文件访问地址妥善保存至数据库中。

        首先,我们关注`UploadFileServiceImp`的核心实现逻辑。该类作为服务接口`UploadFileService`的实现,注入了HttpServletRequest对象以捕获客户端请求中的重要信息,如JWT令牌。通过Hutool库解析令牌,获取并转换用户的唯一标识(ID),确保文件上传与用户身份紧密关联,提高了系统安全性。

        代码中使用了 请导包使用此代码

        hutool包
        lombok包

uploadFilesCollectionImp   Collection实现类



/**
 * @author 青衫烟雨客
 * @description 文件上传控制器实现类,负责处理客户端通过HTTP POST方式发起的多文件上传请求,并将上传的文件持久化保存到服务器指定目录。
 * 使用Spring MVC框架中的`@RequestMapping("/upload")`注解定义了文件上传API的基础路径。
 * @since 2024/02/03
 */
@Slf4j
@RestController
@RequestMapping("/upload")
public class uploadFilesCollectionImp {

    @Autowired
    private uploadFileServiceImp uploadFileServiceImp;

    /**
     * 处理POST方法的多文件上传请求,接收一个MultipartFile类型的数组参数。
     *
     * @param files 客户端提交的待上传文件集合
     * @return Result 对象封装了上传结果信息。如果所有文件上传成功,则返回包含每个文件完整访问地址的Result.success对象;
     * 若有文件上传失败,则返回Result.error对象并附带错误提示信息。
     */
    @PostMapping
    public R upload(@RequestParam("files") MultipartFile[] files) {
        try {
            List<String> uploadFileUrls = uploadFileServiceImp.uploadFile(files);
            // 如果上传成功,则返回包含文件URL的R.success对象
            if (!CollectionUtils.isEmpty(uploadFileUrls)) {
                return R.success(uploadFileUrls);
            }

            // 如果上传失败且uploadFileUrls为空(假设这代表失败)
            return R.error("文件上传失败");
        } catch (RuntimeException e) {
            // 捕获自定义异常,如文件上传过程中可能出现的问题
            log.error("文件上传时发生错误:{}", e.getMessage());
            return R.error("文件上传失败:" + e.getMessage());
        } catch (Exception e) {
            // 其他未知异常
            log.error("文件上传时发生未知错误:{}", e.getMessage());
            return R.error("文件上传过程中出现未知错误");
        }
    }
}

UploadFileService  Service接口层



/**
 * @author 青衫烟雨客
 * @description 文件上传服务接口,定义了处理文件批量上传业务逻辑的方法。
 * @date 创建时间: 2024/2/7
 */
public interface UploadFileService {

    /**
     * 批量上传文件方法。该方法接收一个MultipartFile数组,代表用户要上传的多个文件,
     * 并返回一个包含所有成功上传文件访问链接地址的字符串列表。
     *
     * @param files MultipartFile[] 用户选择并提交的多个待上传文件对象
     * @return List<String> 成功上传文件的网络访问链接地址列表,每个地址对应一个上传成功的文件
     */
    List<String> uploadFile(MultipartFile[] files);
}

UploadFileService  Service实现类



/**
 * @author 青衫烟雨客
 * @date 2024/1/2
 * @description 实现文件上传服务接口的类,负责处理文件上传逻辑并存储到服务器,并将文件访问地址存入数据库
 */
@Slf4j
@Service
public class uploadFileServiceImp implements UploadFileService {

    // Spring自动注入HttpServletReq
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青山烟雨客:-)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值