当前位置: 移动技术网 > IT编程>开发语言>Java > 详解SpringMVC实现图片上传以及该注意的小细节

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

2019年07月22日  | 移动技术网IT编程  | 我要评论
先附上图片上传的代码 jsp代码如下: <form action="${path}/upload/uploadpic.do" method="post

先附上图片上传的代码

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();这边获取的集合将为空。

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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网