Spring MVC--11.文件上传

来源:互联网 发布:淘宝懒人软件靠谱么 编辑:程序博客网 时间:2024/06/05 09:20

1      文件上传—其他服务器

1.1        导入jar

跨服务器上传文件jar。Io,fileupload

 

1.2        需求

上传图片,图片里面回显。Ajax。页面不刷新图片回显。

Ajax能不能提交表单?

 

<img src=”图片路径”/>

//把文件关联表单

//触发ajax事件

 

<input type=file onchange=“ajax事件”/>

<input type=”hidden” value=”图片相对路径”/>

 

数据库保存相对路径

 

模拟2台服务器:

创建一个项目,图片服务器项目,图片服务器和上传图片的项目端口不一致。

 

 

 

1.3        Springmvc.xml开启文件上传

Springmvc配置文件配置支持文件上传类:

 

1.4        页面ajax

发送请求,上传图片:图片被关联表单。提交表单:jquery.form.js

 

回显:<img src=””>

上传:<input file= >  onchange

 

1.5        uploadController

使用jersy服务器进行跨服务器上传:

@Controller@RequestMapping("/upload")public classUploadController {    @RequestMapping("uploadPic")   public voiduploadPic(HttpServletRequest request,String fileName,PrintWriter out){      //把Request强转成多部件请求对象      MultipartHttpServletRequestmh = (MultipartHttpServletRequest) request;      //根据文件名称获取文件对象      CommonsMultipartFilecm = (CommonsMultipartFile) mh.getFile(fileName);      //获取文件上传流      byte[] fbytes =cm.getBytes();           //文件名称在服务器有可能重复?      StringnewFileName="";      SimpleDateFormatsdf = newSimpleDateFormat("yyyyMMddHHmmssSSS");      newFileName= sdf.format(newDate());           Randomr = newRandom();           for(int i =0 ;i<3;i++){         newFileName=newFileName+r.nextInt(10);      }           //获取文件扩展名      StringoriginalFilename = cm.getOriginalFilename();      Stringsuffix = originalFilename.substring(originalFilename.lastIndexOf("."));           //创建jesy服务器,进行跨服务器上传      Clientclient = Client.create();      //把文件关联到远程服务器      WebResourceresource = client.resource(Commons.PIC_HOST+"/upload/"+newFileName+suffix);      //上传      resource.put(String.class, fbytes);                //ajax回调函数需要会写写什么东西?      //图片需要回显:需要图片完整路径      //数据库保存图片的相对路径.      StringfullPath = Commons.PIC_HOST+"/upload/"+newFileName+suffix;           StringrelativePath="/upload/"+newFileName+suffix;      //{"":"","":""}      Stringresult="{\"fullPath\":\""+fullPath+"\",\"relativePath\":\""+relativePath+"\"}";           out.print(result);                   }  }


1.6        修改图片服务器文件上传权限

1.7        图片上传位置

 

1.8        重点—我草你大爷

 

2      上传图片—本地磁盘

2.1        配置虚拟目录 –用于存放上传图片

2.1.1     手动

在tomcat上配置图片虚拟目录,在tomcat下conf/server.xml中添加:

<Context docBase="D:\develop\upload\temp"path="/pic" reloadable="false"/>

访问http://localhost:8080/pic即可访问D:\develop\upload\temp下的图片。

2.1.2     图形化操作

也可以通过eclipse配置,如下图:

 

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

测试效果,如下图:

 

 

2.2   加入jar包

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

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

 

 

2.3        配置上传解析器

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

<!-- 文件上传,id必须设置为multipartResolver --><bean id="multipartResolver"    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    <!-- 设置文件上传大小 -->    <property name="maxUploadSize"value="5000000"/></bean>

2.4    jsp页面修改

在商品修改页面,打开图片上传功能,如下图:

设置表单可以进行文件上传,如下图:

2.5   图片上传

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

/** * 更新商品 * * @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";}

效果,如下图: