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

详解SpringMVC实现图片上传以及该注意的小细节

程序员文章站 2024-03-06 13:50:50
先附上图片上传的代码 jsp代码如下:

先附上图片上传的代码

jsp代码如下:

<form action="${path}/upload/uploadpic.do" method="post" enctype="multipart/form-data">   
<div>
    ![](${path}/mall/image/load_image.png)
    <input type="file" id="input-image" name="input-image">
    <input id="input-relative-path" name="imgs" type="hidden" >
    <input id="input-last-path" type="hidden">
    <input type="submit" value="上传图片">
 </div>
</form>

controller代码:通过spring的方式实现

@controller
@requestmapping("/upload")
public class uploadcontroller extends basecontroller {
  @requestmapping(value = "/uploadpic", method = requestmethod.post)
  @logincheck
  public void uploadpic(httpservletrequest request, printwriter out, string lastrealpath) throws ioexception {
    // 将当前上下文初始化给commonsmultipartresolver
    commonsmultipartresolver resolver = new commonsmultipartresolver(request.getsession().getservletcontext());
    // 检查form中是否有enctype="multipart/form-data"
    if (resolver.ismultipart(request)) {
      // 强制转化request
      multiparthttpservletrequest req = (multiparthttpservletrequest) request;
      // 从表单获取input名称
      iterator<string> iterable = req.getfilenames();
      // 存在文件
      if (iterable.hasnext()) {
        string inputname = iterable.next();
        // 获得文件
        multipartfile mf = req.getfile(inputname);
        byte[] mfs = mf.getbytes();
        // 定义文件名
        string filename = new simpledateformat("yyyymmddhhmmsssss").format(new date());
        random random = new random();
        for (int i = 0; i < 3; i++) {
          filename = filename + random.nextint(10);
        }
        // 获得后缀名
        string orifilename = mf.getoriginalfilename();
        string suffix = orifilename.substring(orifilename.lastindexof("."));

        // 上传图片到本地
        string localpath = "/users/zr/desktop/webpro/console/src/main/webapp/image/" + filename + suffix;
        mf.transferto(new file(localpath));

        // 获取图片的宽高
        bufferedimage bufferedimage = imageio.read(new fileinputstream(new file(localpath)));
        int width = bufferedimage.getwidth();
        int height = bufferedimage.getheight();
        // 获取文件大小
        long size = mf.getsize();
      }
    }
  }
}

spring-mvc.xml代码:

 <!--
  文件上传的视图解析器,id值是固定的
 -->
<bean id="multipartresolver" class="org.springframework.web.multipart.commons.commonsmultipartresolver">
  <property name="maxuploadsize" value="1024000"/>
  <!-- 其他属性 -->
</bean>

功能的实现其实很简单,但是对于初学者还是需要注意如下几个点

  • form上的enctype="multipart/form-data"不能忘记。
  • <input type="file" onchange="submitupload()" id="input-image" name="input-image"> 的name标签可以随便取名,但是不能忽略,否则iterator<string> iterable = req.getfilenames();这边获取的集合将为空。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。