springboot 项目打包成jar包 部署到Linux服务器上,发现项目中上传的一重启项目或者时间长了,文件就访问不到了

本人是小白一枚,前段时间弄了一个发布活动的功能,本地测试的时候没什么问题。但当我打包成jar包  部署到服务器之后,就发现问题了。我重启服务或者时间过了几天之后,发布活动中的图片突然就报错了,显示地址错误。一脸蒙蔽的我。

后来也是各种百度,才知道发生了什么。

原因:把项目部署到服务器上之后,文件上传默认会在/tmp路径中。而且 linux对’/tmp’下文件会自动清理。

那我们可以更改下存贮文件的地址

创建一个配置类:

public class WebMvcConfiguration implements WebMvcConfigurer {

    @Value("${out.resource.path}")
    private String path;



    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(new String[]{"/imgUrl/**"}).addResourceLocations( "file:" + path + "/");
    }
}

在配置文件中添加:我的文件是:application.properties,有的朋友可能是application.yml,下面配置文件中限制文件的大小看情况添加吧,因为我控制器层中有判断文件大小

#图片上传路径
out.resource.path=D:\\upload
#out.resource.path=file:D://upload/

#限制上传文件的大小
spring.servlet.multipart.max-request-size=10MB
spring.servlet.multipart.max-file-size=10MB

控制器类:

    
    /**
     * 上传文件夹的名称
     */
    @Value("${out.resource.path}")
    private String path;
    private static final String UPLOAD_DIR_NAME = "imgUrl";
    /**
     * 上传文件的最大大小
     */
    private static final long FILE_MAX_SIZE = 5 * 1024 * 1024;

    /**
     * 允许上传的文件类型
     */
    private static final List<String> FILE_CONTENT_TYPES = new ArrayList<>();

    /**
     * 初始化允许上传的文件类型的集合
     */
    static {
        FILE_CONTENT_TYPES.add("image/jpeg");
        FILE_CONTENT_TYPES.add("image/png");

    }


@RequestMapping("/insertImg")
    public ResponseResult<String> handleUpload(HttpSession session, @RequestParam("file") MultipartFile file) {

        // 检查是否存在上传文件 > file.isEmpty()
        if (file.isEmpty()) {
            // 抛出异常:文件不允许为空
            throw new FileEmptyException("上传失败!没有选择上传的文件,或选中的文件为空");
        }
        // 检查文件大小 >file.getSize()
        if (file.getSize() > FILE_MAX_SIZE) {
            // 抛出异常:文件大小超出限制
            throw new FileSizeOutOfLimitException("您上传文件的大小超过了:"+FILE_MAX_SIZE);
        }
        // 检查文件类型 > file.getContentType()
        if (!FILE_CONTENT_TYPES.contains(file.getContentType())) {
            // 抛出异常:文件类型限制
            throw new FileTypeNotSupportException("您上传的图片格式不对,只能上传以下格式:"+FILE_CONTENT_TYPES);
        }

        // 确定上传文件夹的路径
        // session.getServletContext.getRealPath (UPLOAD_DIR_NAME)
        // > exists() > mkdirs()
        //String parentPath = session.getServletContext().getRealPath(UPLOAD_DIR_NAME);
        String parentPath = path ;
        File parent = new File(parentPath);
        if (!parent.exists()) {
            parent.mkdirs();
        }
        // 确定文件名 > getOriginalFileName()
        String originalFileName = file.getOriginalFilename();
        int beginIndex = originalFileName.lastIndexOf(".");
        String suffox = originalFileName.substring(beginIndex);
        String fileName = System.currentTimeMillis() + "" + (new Random().nextInt(900000) + 100000) + suffox;
        // 确定文件
        File dest = new File(parent, fileName);
        // 执行保存文件
        try {
            file.transferTo(dest);
            System.err.println("上传成功");
        } catch (IllegalStateException e) {
            // 抛出异常:上传失败!

        } catch (IOException e) {
            // 抛出异常:上传失败!

        }

        // 获取当前用户的id
        Integer uid = getUidFromSession(session);

        // 更新头像数据
        String avatar = "/" + UPLOAD_DIR_NAME + "/" + fileName;// 本地运行使用这个
//        iArticleService.addImgUrl(avatar);
        // 返回头像
        ResponseResult<String> rr = new ResponseResult<>();
        rr.setState(SUCCESS);
        rr.setData("/" + UPLOAD_DIR_NAME + "/" + fileName);
        return rr;

    }

目前为止我是这么解决的,不晓得对不对,哈哈   有更好的方法的朋友们可以建议下  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

啥都不懂的程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值