教你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图片上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 最简单的spring boot打包docker镜像的实现

    最简单的spring boot打包docker镜像的实现

    这篇文章主要介绍了最简单的spring boot打包docker镜像的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 浅析Spring容器原始Bean是如何创建的

    浅析Spring容器原始Bean是如何创建的

    这篇文章主要是想和小伙伴们一起聊聊 Spring 容器创建 Bean 最最核心的 createBeanInstance 方法,文中的示例代码讲解详细,需要的可以参考一下
    2023-08-08
  • JAVA利用泛型返回类型不同的对象方法

    JAVA利用泛型返回类型不同的对象方法

    下面小编就为大家带来一篇JAVA利用泛型返回类型不同的对象方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 在IDEA使用中directory和package的操作

    在IDEA使用中directory和package的操作

    这篇文章主要介绍了在IDEA使用中directory和package的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • JavaWeb实现Session跨页面传递数据

    JavaWeb实现Session跨页面传递数据

    本文主要介绍了 JavaWeb实现Session跨页面传递数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • mybatis中association和collection的使用与区别

    mybatis中association和collection的使用与区别

    在 MyBatis 中,<association> 和 <collection> 是用于配置结果映射中关联关系的两个元素,本文主要介绍了mybatis中<association>和<collection>的使用与区别,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Java线程池实现原理详解

    Java线程池实现原理详解

    在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源,在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收,本文将对Java线程池实现原理进行详细介绍,需要的朋友可以参考下
    2023-07-07
  • java异常继承何类,运行时异常与一般异常的区别(详解)

    java异常继承何类,运行时异常与一般异常的区别(详解)

    下面小编就为大家带来一篇java异常继承何类,运行时异常与一般异常的区别(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java泛型定义与用法实例详解

    Java泛型定义与用法实例详解

    这篇文章主要介绍了Java泛型定义与用法,结合实例形式较为详细的分析了Java中泛型的概念、原理、定义、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-08-08
  • Springboot @Validated和@Valid的区别及使用详解

    Springboot @Validated和@Valid的区别及使用详解

    这篇文章主要介绍了Springboot @Validated和@Valid的区别及使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论