欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

bootstrap fileinput组件整合Springmvc上传图片到本地磁盘

程序员文章站 2022-06-11 14:18:18
整合前的准备步骤 1.搭建好基础框架,本文用的是ssm(spring+springmvc+mybatis),这里的过程就不在本文中讲了,之前我做个一个demo(ssm整合...

整合前的准备步骤

1.搭建好基础框架,本文用的是ssm(spring+springmvc+mybatis),这里的过程就不在本文中讲了,之前我做个一个demo(ssm整合+用户模块),可以参考这个搭建好。

2.下载bootstrap fileinput组件源码:

搭建后的效果图

图1.

bootstrap fileinput组件整合Springmvc上传图片到本地磁盘

图2.

bootstrap fileinput组件整合Springmvc上传图片到本地磁盘

图3.

bootstrap fileinput组件整合Springmvc上传图片到本地磁盘

图4.

bootstrap fileinput组件整合Springmvc上传图片到本地磁盘

图5.

bootstrap fileinput组件整合Springmvc上传图片到本地磁盘

在需要编写的jsp页面引入组件

本工程的路径界面如下:

bootstrap fileinput组件整合Springmvc上传图片到本地磁盘

在jsp引入组件需要的js,css,如下代码:

<!-- jq -->
<script type="text/javascript"
 src="<%=basepath%>static/plugs/jquery-3.1.1.min.js"></script>
<!-- bootstrap -->
<link rel="stylesheet"
 href="<%=basepath%>static/plugs/bootstrap/css/bootstrap.min.css" rel="external nofollow" >
<script type="text/javascript"
 src="<%=basepath%>static/plugs/bootstrap/js/bootstrap.min.js"></script>
<link href="<%=basepath%>css/xlstyle.css" rel="external nofollow" rel="stylesheet">
<!-- 图片上传即使预览插件 -->
<link rel="stylesheet"
 href="<%=basepath%>static/plugs/bootstrap-fileinput/css/fileinput.min.css" rel="external nofollow" >
<script type="text/javascript"
 src="<%=basepath%>static/plugs/bootstrap-fileinput/js/fileinput.min.js"></script>
 <!-- 这个是汉化-->
<script type="text/javascript"
 src="<%=basepath%>static/plugs/bootstrap-fileinput/js/locales/zh.js"></script>

引入组件,这里以我自己写的网站为例:

<form class="form-horizontal" role="form" method="post"
     action="<%=basepath%>addarticle" enctype="multipart/form-data">
     <div class="form-group">
      <label class="col-sm-2 control-label">菜谱名称</label>
      <div class="col-sm-10">
       <input type="text" name="describ" class="col-sm-10 form-control"
        placeholder="菜谱名称">
      </div>
     </div>
     <div class="form-group">
      <label class="col-sm-2 control-label">菜谱封面</label>
      <div class="col-sm-10">
       <input type="file" name="myfile" data-ref="url2"
        class="col-sm-10 myfile" value="" /> <input type="hidden"
        name="url2" value="">
      </div>
     </div>

还有需要配置组件的详细js,我这里是放在了标签结束的后面:

以上省略

.........

</body>
<script type="text/javascript">
 $(".myfile").fileinput({
  //上传的地址
  uploadurl:"<%=basepath%>food/uploadfile",
  uploadasync : true, //默认异步上传
  showupload : false, //是否显示上传按钮,跟随文本框的那个
  showremove : false, //显示移除按钮,跟随文本框的那个
  showcaption : true,//是否显示标题,就是那个文本框
  showpreview : true, //是否显示预览,不写默认为true
  dropzoneenabled : false,//是否显示拖拽区域,默认不写为true,但是会占用很大区域
  //minimagewidth: 50, //图片的最小宽度
  //minimageheight: 50,//图片的最小高度
  //maximagewidth: 1000,//图片的最大宽度
  //maximageheight: 1000,//图片的最大高度
  //maxfilesize: 0,//单位为kb,如果为0表示不限制文件大小
  //minfilecount: 0,
  maxfilecount : 1, //表示允许同时上传的最大文件个数
  enctype : 'multipart/form-data',
  validateinitialcount : true,
  previewfileicon : "<i class='glyphicon glyphicon-king'></i>",
  msgfilestoomany : "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
  allowedfiletypes : [ 'image' ],//配置允许文件上传的类型
  allowedpreviewtypes : [ 'image' ],//配置所有的被预览文件类型
  allowedpreviewmimetypes : [ 'jpg', 'png', 'gif' ],//控制被预览的所有mime类型
  language : 'zh'
 })
 //异步上传返回结果处理
 $('.myfile').on('fileerror', function(event, data, msg) {
  console.log("fileerror");
  console.log(data);
 });
 //异步上传返回结果处理
 $(".myfile").on("fileuploaded", function(event, data, previewid, index) {
  console.log("fileuploaded");
  var ref = $(this).attr("data-ref");
  $("input[name='" + ref + "']").val(data.response.url);
 });
 //同步上传错误处理
 $('.myfile').on('filebatchuploaderror', function(event, data, msg) {
  console.log("filebatchuploaderror");
  console.log(data);
 });
 //同步上传返回结果处理
 $(".myfile").on("filebatchuploadsuccess",
   function(event, data, previewid, index) {
    console.log("filebatchuploadsuccess");
    console.log(data);
   });
 //上传前
 $('.myfile').on('filepreupload', function(event, data, previewid, index) {
  console.log("filepreupload");
 });
</script>

配置tomcat的虚拟路径

如题,本次图片上传是要上传到服务器上别的磁盘位置,比如我的电脑作为服务器来说,一般情况下用tomcat上传图片只能上传到项目的某文件夹中,所以这里我们需要配置tomcat来打开tomcat的虚拟路径,让tomcat可以映射到本地磁盘的路径上。操作如下图:

bootstrap fileinput组件整合Springmvc上传图片到本地磁盘

1.双击这里

2.点击我画圈的地方

bootstrap fileinput组件整合Springmvc上传图片到本地磁盘

3.配置tomcat的虚拟路径

bootstrap fileinput组件整合Springmvc上传图片到本地磁盘

path:也就是我们tomcat的虚拟访问路径,documnet base是我们实际本地磁盘需要被映射的路径。

springmvc的controller层编写

@controller
@requestmapping("/food")
public class picturecontroller {
 // uploadfile
 @requestmapping("/uploadfile")
 @responsebody
 public map<string, object> uploadfile(multipartfile myfile)
   throws illegalstateexception, ioexception {
  // 原始名称
  string oldfilename = myfile.getoriginalfilename(); // 获取上传文件的原名
//  system.out.println(oldfilename);
  // 存储图片的虚拟本地路径(这里需要配置tomcat的web模块路径,双击猫进行配置)
  string savefilepath = "e://picture";
  // 上传图片
  if (myfile != null && oldfilename != null && oldfilename.length() > 0) {
   // 新的图片名称
   string newfilename = uuid.randomuuid() + oldfilename.substring(oldfilename.lastindexof("."));
   // 新图片
   file newfile = new file(savefilepath + "\\" + newfilename);
   // 将内存中的数据写入磁盘
   myfile.transferto(newfile);
   // 将新图片名称返回到前端
   map<string, object> map = new hashmap<string, object>();
   map.put("success", "成功啦");
   map.put("url", newfilename);
   return map;
  } else {
   map<string, object> map = new hashmap<string, object>();
   map.put("error", "图片不合法");
   return map;
  }
 }
}

写完后直接访问controller层配置的路径,即可成功,最终效果如前面的效果图一样。

以上所述是小编给大家介绍的bootstrap fileinput组件整合springmvc上传图片到本地磁盘,希望对大家有所帮助