教你Springboot如何实现图片上传

 更新时间:2023年07月06日 09:05:22   作者:高级java开发  
这篇文章主要介绍了教你Springboot如何实现图片上传,首先大家明白图片上传,需要在数据库定义一个varchar类型的img字段图片字段,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下

1.首先图片上传,需要在数据库定义一个varchar类型的img字段图片字段

2.需要在pom文件加图片上传的配置文件

        <!--上传图片-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

3.在yml里添加限制图片大小

#配置mysql的连接
spring:
  #图片上传
  servlet:
    multipart:
      enabled: true
      max-file-size: 50MB
      max-request-size: 50MB

4.html页面定义div

    <div class="form-group">
        <label  class="col-sm-2 control-label">图片</label>
        <div class="col-sm-10">
            <input name="goodsImg" id="testimg">
            <!-- imgfile  是上传图片的参数  类型是 MultipartFile 文件类型
                     imgfile 必须和后台 上传图片的方法 uploadImg  参数保持一致 -->
            <input type="file" multiple class="projectfile" accept="image/*" name="imgfile" id="goodsImg">
        </div>
    </div>

js中定义函数 图片上传

<script>
    //上传图片
    function uploadImg(url){
        $('#goodsImg').fileinput({
            initialPreview:url,
            //初始化图片配置:
            initialPreviewConfig: [
                {key: 1, showDelete: false}
            ],
            //是否初始化图片显示
            initialPreviewAsData: true,
            language: 'zh', //设置语言
            uploadUrl: '/user/uploadImg', //上传的地址
            allowedFileExtensions: ['jpg', 'gif', 'png'],//接收的文件后缀
            showUpload: true, //是否显示上传按钮
            showCaption: false,//是否显示标题
            browseClass: "btn btn-primary", //按钮样式
            maxFileCount: 2, //表示允许同时上传的最大文件个数
            enctype: 'multipart/form-data',
            validateInitialCount:true,
            previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
            msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
        }).on('fileuploaded', function(event, data, previewId, index) {
            alert(data.response.path);//http
            //http://localhost:8080/ssm_bootstrap/upload/1279fabb-5515-44e2-84e8-4a7dd79cc08c.JPG
            var	imgval = "http://"+ location.host+"/"+data.response.path;
            $('#testimg').val(imgval);
        });
    }
</script>

5.图片上传工具类

public class FileUtil {
	//上传
	/**
	 * <pre>uploadFile(上传)   
	 * 创建人:wrx
	 * 创建时间:2023年3月29日 下午3:21:17    
	 * 修改人:ba
	 * 修改时间:2023年3月29日 下午3:21:17    
	 * 修改备注: 
	 * @param imgfile
	 * @param request
	 * @return</pre>
	 */
	public static String uploadFile(MultipartFile imgfile,HttpServletRequest request){
    	//1、上传路径:项目发布tomcat服务器
		//D:\workUtilsInstall\apache-tomcat-8.0.0\webapps\week_employee_hzy\\upload
		String path = request.getServletContext().getRealPath("/")+"/upload";
		File file = new File(path);
		if(!file.exists()){//不存在
			file.mkdirs();
		}
		//生成新的文件名称,原因:防止文件名称一样后者上传的文件会覆盖前者上传的文件(前提是文件名称必须一样并且在用一个目录下)
		//生成新的文件名称,保证文件名称唯一有两种方法:
		// 	  1.通过UUID实现文件名称唯一 (UUID会生成32位字母+数字唯一的一个字符串)
		//	  2.通过时间戳现文件名称唯一  (时间戳是毫秒级时间 时间会一直往上加,生成13位数字)注意只有java生成13位 其他则是10位比如oracle、mysql、php
		//  获取时间戳
		//long currentTimeMillis = System.currentTimeMillis();
		//System.out.println(currentTimeMillis);
		String uuid = UUID.randomUUID().toString();
		String oldName = imgfile.getOriginalFilename();//1.jpg
		String suffix = oldName.substring(oldName.lastIndexOf("."));
		String newFile = uuid+suffix;
		File file2 = new File(path+"\\"+newFile);
		try {
			imgfile.transferTo(file2);
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "upload/"+newFile;
	}
}

6.Controller层调用图片上传方法

/**
     *
     *调用图片上传工具类
     * @param imgfile
     * @param request
     * @return java.lang.String
     * @author wrx
     * @date 2023/5/17 0017 16:00
     */
    @RequestMapping("uploadImg")
    public String uploadImg(MultipartFile imgfile, HttpServletRequest request){
        String filePath = FileUtil.uploadFile(imgfile, request);
        System.out.println("{\"path\":\"" + filePath + "\"}");
        return "{\"path\":\"" + filePath + "\"}";//可以
    }

访问这个路径http://localhost:8080/upload/b54e356b-6dba-48ae-8ea1-27b4dad158b5.png

访问成功图片上传就完成了 

到此这篇关于教你Springboot如何实现图片上传的文章就介绍到这了,更多相关Springboot图片上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Netty分布式ByteBuf的分类方式源码解析

    Netty分布式ByteBuf的分类方式源码解析

    这篇文章主要为大家介绍了Netty分布式ByteBuf的分类方式源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • 详细说明关于Java的数据库连接(JDBC)

    详细说明关于Java的数据库连接(JDBC)

    这篇文章主要介绍了详细说明关于Java的数据库连接JDBC,JDBC是用Java语言向数据库发送SQL语句,需要的朋友可以参考下面文章内容
    2021-09-09
  • Springboot项目打包如何将依赖的jar包输出到指定目录

    Springboot项目打包如何将依赖的jar包输出到指定目录

    公司要对springboot项目依赖的jar包进行升级,但是遇到一个问题,项目打包之后,没办法看到他里面依赖的jar包,版本到底是不是升上去了,没办法看到,下面通过本文给大家分享Springboot项目打包如何将依赖的jar包输出到指定目录,感兴趣的朋友一起看看吧
    2024-05-05
  • 深入解析Spring Boot中的@ConfigurationProperties注解

    深入解析Spring Boot中的@ConfigurationProperties注解

    本文主要介绍了深入解析Spring Boot中的@ConfigurationProperties注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-02-02
  • springboot临时文件存储目录配置方式

    springboot临时文件存储目录配置方式

    这篇文章主要介绍了springboot临时文件存储目录配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot中@ComponentScan注解过滤排除不加载某个类的3种方法

    SpringBoot中@ComponentScan注解过滤排除不加载某个类的3种方法

    这篇文章主要给大家介绍了关于SpringBoot中@ComponentScan注解过滤排除不加载某个类的3种方法,文中通过实例代码介绍的非常详细,对大家学习或者使用SpringBoot具有一定的参考学习价值,需要的朋友可以参考下
    2023-07-07
  • 学习在一台新电脑上配置JAVA开发环境

    学习在一台新电脑上配置JAVA开发环境

    本文主要介绍了如何在一台新电脑上配置JAVA开发环境,每一个步骤都有对应的截图和文字说明,需要的朋友可以参考下
    2015-07-07
  • java解决单缓冲生产者消费者问题示例

    java解决单缓冲生产者消费者问题示例

    这篇文章主要介绍了java解单缓冲生产者消费者问题示例,需要的朋友可以参考下
    2014-04-04
  • Java源码刨析之ArrayQueue

    Java源码刨析之ArrayQueue

    在本篇文章当中主要给大家介绍一个比较简单的JDK为我们提供的容器ArrayQueue,这个容器主要是用数组实现的一个单向队列,整体的结构相对其他容器来说就比较简单了
    2022-07-07
  • Springboot Autowried及Resouce使用对比解析

    Springboot Autowried及Resouce使用对比解析

    这篇文章主要介绍了Springboot Autowried及Resouce使用对比解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论