spring boot + jpa上传图片

大体思路

  • 一般是用户将图片上传到服务器下的文件夹中,然后将图片的路径和文件名存入到数据库
  • 由于用户自己保存的图片文件名可能和其他同名文件造成冲突,所以在这里我使用了UUID来生成随机的文件名
  • PS:第一次写博客,有很多不懂的东西,望各位大佬看出问题来及时提出,勿喷,谢谢。

整体步骤

pom的相关配置

  • 在这里我用的是FreeMarker,默认的视图模板后缀是ftl,习惯用jsp的也可以用jsp。
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <!--关于jpa的相关依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

application.properties相关配置

  • 重点是上传图片大小的配置,另外两个是关于其他的配置。我看了下其他人的博客,在这里配置和我有些许不同,说实话我也不是很理解,有大佬看到的话可以解答一下。我这个文件配置是百度的,但复制过去它会报错,IDEA自己修复之后就这样了,不过我的可以正常使用。
#静态资源过滤策略
spring.resources.static-locations=classpath:/static/

#设置全局日期解析格式
spring.mvc.date-format=yyyy-MM-dd

#maxFileSize 是单个文件大小
spring.servlet.multipart.max-file-size=50MB
#maxRequestSize是设置总上传的数据大小
spring.servlet.multipart.max-request-size=50MB

Controller相关代码

  • 新生成的文件名称和上传的文件路径我都写在Cortroller了。
@RequestMapping("/add")
    public String upload(Stu stu,@RequestParam("file") MultipartFile file) throws IOException {
        if(!file.isEmpty()) {
            //定义上传文件的路径
            String path1=System.getProperty("user.dir")+"\\src\\main\\resources\\static";
            String path2="\\upload";
            //String path = System.getProperty("stu.dir")+"\\src\\main\\resources\\static\\upload";
            String path=path1+path2;
            //上传文件的名字(包含后缀名)
            String fileName = file.getOriginalFilename();
            //用UUID创建新的名字(没有后缀名)
            String uuidname= UUID.randomUUID().toString().replace("-","");
            //把uuid创建的名字和文件后缀名截取出来合成一个新的完整的文件名
            String getFileName = uuidname + fileName.substring(fileName.lastIndexOf("."));
            File filepath = new File(path+getFileName);
            //判断父目录是否存在
            if (!filepath.getParentFile().exists()) {
                filepath.getParentFile().mkdirs();
            }

            //将上传文件进行保存
            file.transferTo(new File(path + File.separator + getFileName));
            //输出可看到上传文件的路径和文件名
            System.out.println("上传文件路径和图片名称:" + (path + File.separator + getFileName));
            //将文件添加到Model中
            //model.addAttribute("filename", file.getOriginalFilename());
            stu.setNewname(path2 + File.separator + getFileName);

        }
        stuService.add(stu);
        return "redirect:stu";
    }

页面

  • 因为我做的是一个小型的后台项目,随便嵌套了一个后台模板,所以下面的代码带有一些div,可忽略,最重要的是form表单。
<form method="post" class="form-horizontal" action="add" enctype="multipart/form-data">
<div class="form-group">
   <label class="col-sm-2 control-label">图片</label>
    <div class="col-sm-10">
        <input type="file" class="form-control" name="file">
    </div>
</div>
</form>
  • 在这里上传图片,可以跳回自己定义的想让图片显示的地址。
    在这里插入图片描述
  • 图片显示,ftl里面的代码,我上传到数据库了,可能会和你们不大一样。
<td><img src="${stu.newname}" width="80" height="60"></td>
  • OK了
    我上传的图片
  • 文件夹也有。
    在这里插入图片描述
    多多交流,感谢。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值