用form表单提交方式上传图片到服务器

springMVC为文件上传提供了直接的支持,这种支持是通过MultipartResolver实现的,实现类为CommonsMultipartResovler.

依赖:commons-fileupload-1.2.jar     commons-io-1.3.2.jar

普通的文件上传:

1.配置虚拟目录

在eclipse中的Tomcat中配置图片虚拟目录(模拟图片服务器),访问http://localhost:8080/pic/xxx.jpg即可访问到虚拟目录(图片服务器)下的图片。

如下图:

 

复制一张图片到存放图片的文件夹,使用浏览器访问

测试效果,如下图:

 

2.加入jar包

实现图片上传需要加入的jar包,如下图:

下载地址:https://download.csdn.net/download/weixin_39556885/9928690

https://download.csdn.net/download/huoniuyi1230/10111679

把两个jar包放到工程的lib文件夹中

 

3.配置上传解析器

在springmvc.xml中配置文件上传解析器

<!-- 文件上传,id必须设置为multipartResolver -->

<bean id="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

    <!-- UTF-8必须和pageEncoding属性一直 -->

    <property name="defaultEncoding" value="UTF-8" />

    <!-- 设置文件上传大小 -->

    <property name="maxUploadSize" value="5000000" />

</bean>

4.jsp页面修改

必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。

 

enctype="multipart/form-data"

 

5.图片上传

在更新商品方法中添加图片上传逻辑 controller

/**

 * 更新商品

 * @param item

 * @return

 * @throws Exception

 */

@RequestMapping("updateItem")

public String updateItemById(Item item, MultipartFile pictureFile) throws Exception {

    // 设置图片名称,不能重复,可以使用uuid

    String picName = UUID.randomUUID().toString();

    // 获取文件名

    String oriName = pictureFile.getOriginalFilename();

    // 获取图片后缀

    String extName = oriName.substring(oriName.lastIndexOf("."));

    // 开始上传

    pictureFile.transferTo(new File("C:/upload/image/" + picName + extName));

    // 设置图片名到商品中

    item.setPic(picName + extName);

    // ---------------------------------------------

    // 更新商品

    this.itemService.updateItemById(item);

    return "forward:/itemEdit.action";

}

效果,如下图:

 

ajax文件上传:

如果form表单的数据大,form表单和图片一起上传,会相互影响,降低上传的效率,因此我们可以把图片做成异步上传。

1.jsp:

2.controller:

MultipartFile对象的常用方法:

  • byte[] getBytes():获取文件数据
  • String getContentType[]:获取文件MIME类型,如image/jpeg等
  • InputStream getInputStream():获取文件流
  • String getName():获取表单中文件组件的名字
  • String getOriginalFilename():获取上传文件的原名
  • Long getSize():获取文件的字节大小,单位为byte
  • boolean isEmpty():是否有上传文件
  • void transferTo(File dest):将上传文件保存到一个目录文件中

文件类型有:

图片:image/jpeg

           image/png

           image/gif

txt:text/plain

ppt:application/vnd.ms-powerpoint

excel:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

word:application/vnd.openxmlformats-officedocument.wordprocessingml.document

可以根据文件类型和文件大小限制上传文件的类型和大小:

猜你喜欢

转载自blog.csdn.net/qq_43154385/article/details/84637892