Springmvc文件上传(图片)

springmvc文件上传(图片)

最近在做javaee实验,前面的架构都已经搭建完成了结尾老师,说另加个功能给每一个实例加一个封面图,并且支持修改与上传及显示。
所以学习一下关于springmvc的文件上传的知识。

上传文件是由form表单标签中的,file类型的input标签提供的


    <div>
        <form action="/fileupload" method="post" enctype="multipart/form-data">
            <p><span><label>上传封面:</label></span>
            <input type="file" name="file"></p>
            <input type="submit" value="上传">
        </form>
    </div>

这里的enctype类型必须选择multipart/form-data 才可以生效。Multipart/form-data是指提交数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。
tips:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart/form-data才能完整的传递文件数据。

补充
表单enctype属性,规定了from表单再发送到服务器时候的编码方式,有如下的三个值
1、application/x-www-form-urlencoded 默 认的编码方式,但是再用文本的传输和MP3等大型文件的时候,使用这种编码就显得效率低下了。
2、multipart/from-data。指定传输数据为二进制类型,比如图片、mp3、文件。
3、text/plain。纯文本的传输。空格转换为“+”加号,但不对特殊字符编码。

而后端用MultipartFile file类型接收前端传递的二进制文件数据。
一般常见的存储图片到服务器上的的有两种方式,第一种是把文件图片本地存储到服务器上,数据库只保存文件名称路径,可以节省数据库资源。第二种是直接把文件二进制流通过base64转换编码后,再存储到数据库中,每次获取则重新解码即可。
这里我们采用第一种

文件流工具类:

public class FilePathUtil {
    public static final String Img_Path = "E:\\软件测试\\images\\";
}

后端service层代码,controller层则为处理请求页面,这里不做展示了


    public boolean saveimage(Course course, MultipartFile file) throws IOException {
        if(file!=null){
            System.out.println(file);
            //原始文件名
            String originalFilename = file.getOriginalFilename();
            System.out.println("service:"+originalFilename);
            //文件为空表示未设置图片
            if(originalFilename.isEmpty()){
                //默认图片
                course.setUrl("b1f2f46d-6be9-4d20-97e8-99cc5b1fce6e.png");
                System.out.println("service:默认图片");
                return courseMapper.addcourse_image(course)>0;
            }
            //获取图片后缀
            String suffix = originalFilename.substring(originalFilename.lastIndexOf('.'));
            //生成图片存储的名称,uuid避免相同图片名字冲突,并加上图片后缀
            String fileName = UUID.randomUUID().toString() + suffix;
            //图片存储路径
            String filePath = FilePathUtil.Img_Path + fileName;
            File saveFile = new File(filePath);
            //将上传的文件保存到服务器文件系统
            file.transferTo(saveFile);
            //记录下文件名称
            course.setUrl(fileName);
        }
        //持久化course对象
        return courseMapper.addcourse_image(course)>0;
    }

通过uuid处理过的图片展示如下。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值