Spring MVC上传图片的方法

6 篇文章 0 订阅
4 篇文章 0 订阅
@RequestMapping("savebanneradd")
	public String saveBannerAdd(HttpServletRequest request, 
			@RequestParam(value="bannerimg",required = false) MultipartFile image){  //接收图片的参数,前端为file
		Banner banner = new Banner();
		UploadImages uploadImages = new UploadImages();
		String path1 = request.getSession().getServletContext().getRealPath("/");  //上传的路径
		String path2 = "UploadFiles";<span style="white-space:pre">						</span>//保存的文件夹
		String bigImg = uploadImages.upLoadImage(request, image, path1, path2);
		banner.setBigImg(bigImg);
		try {
			bannerService.add(banner);
			return "success";
		} catch (Exception e) {
			e.printStackTrace();
			return(e.getMessage());
			
		}
	}

上传图片工具类 upLoadImage

package cn.xiaoshutou.framework.util;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.multipart.MultipartFile;

public class UploadImages {

	
	/**
	 * 
	 * 图片上传工具类
	 * cn.xiaoshutou.framework.util 
	 * 方法名:upLoadImage
	 * 创建人:liboming 
	 * 时间:2016年4月15日-下午2:05:20 
	 * @param request  需要上传的request对象
	 * @param images  上传的图片数组
	 * @param path1		路径
	 * @param path2		文件夹名称	
	 * @return String	返回的数据
	 * @exception 
	 * @since  1.0.0
	 */
	public String upLoadImage(HttpServletRequest request,MultipartFile image,String path1,String path2){
		List<String> fileTypes = new ArrayList<String>();
		path1 +=path2;  //拼接固定路径
		String path3 = new SimpleDateFormat("yyyyMMdd").format(new Date());//创建文件夹路径
		String savePath="";
		fileTypes.add("jpg");
		fileTypes.add("jpeg");
		fileTypes.add("bmp");
		fileTypes.add("gif");
		fileTypes.add("png");
		fileTypes.add("tiff");
		fileTypes.add("psd");
		fileTypes.add("swf");
		fileTypes.add("svg");
                // 保存文件
                if (!(image.getOriginalFilename() == null || "".equals(image
        				.getOriginalFilename()))) {
        			/*
        			 * 下面调用的方法,主要是用来检测上传的文件是否属于允许上传的类型范围内,及根据传入的路径名
        			 * 自动创建文件夹和文件名,返回的File文件我们可以用来做其它的使用,如得到保存后的文件名路径等这里我就先不做多的介绍。
        			 */
        			File file = this.getFile(image, path1, path3, fileTypes);
        			savePath=file.getName();
        		}
	
		return "/"+path2+"/"+path3+"/"+savePath;
	}

	private File getFile(MultipartFile imgFile,String typeName,String brandName,List fileTypes) { 
		String nowTime =new SimpleDateFormat("yyyyMMddHHmmssSSS") .format(new Date())+new Random().nextInt(10); //重命名
        String fileName = imgFile.getOriginalFilename();  
        //获取上传文件类型的扩展名,先得到.的位置,再截取从.的下一个位置到文件的最后,最后得到扩展名  
         String ext = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());  
         //对扩展名进行小写转换  
         ext = ext.toLowerCase();  
           
         File file = null;  
         if(fileTypes.contains(ext)) {                      //如果扩展名属于允许上传的类型,则创建文件  
             fileName = nowTime+'.'+ext;
        	 file = this.creatFolder(typeName, brandName, fileName);  
             try {  
                imgFile.transferTo(file);                   //保存上传的文件  
            } catch (IllegalStateException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
         }  
         return file;  
    }  
	 private File creatFolder(String typeName,String brandName,String fileName) {  
         File file = null;  
         typeName = typeName.replaceAll("/", "");               //去掉"/"  
         typeName = typeName.replaceAll(" ", "");               //替换半角空格  
         typeName = typeName.replaceAll(" ", "");               //替换全角空格  
          
         brandName = brandName.replaceAll("/", "");             //去掉"/"  
         brandName = brandName.replaceAll(" ", "");             //替换半角空格  
         brandName = brandName.replaceAll(" ", "");             //替换全角空格  
          
         File firstFolder = new File(typeName);         //一级文件夹  
         if(firstFolder.exists()) {                             //如果一级文件夹存在,则检测二级文件夹  
             File secondFolder = new File(firstFolder,brandName);  
             if(secondFolder.exists()) {                        //如果二级文件夹也存在,则创建文件  
                 file = new File(secondFolder,fileName);  
             }else {                                            //如果二级文件夹不存在,则创建二级文件夹  
                 secondFolder.mkdir();  
                 file = new File(secondFolder,fileName);        //创建完二级文件夹后,再合建文件  
             }  
         }else {                                                //如果一级不存在,则创建一级文件夹  
             firstFolder.mkdir();  
             File secondFolder = new File(firstFolder,brandName);  
             if(secondFolder.exists()) {                        //如果二级文件夹也存在,则创建文件  
                 file = new File(secondFolder,fileName);  
             }else {                                            //如果二级文件夹不存在,则创建二级文件夹  
                 secondFolder.mkdir();  
                 file = new File(secondFolder,fileName);  
             }  
         }  
         return file;  
    }
}
前端

 <input type="file" name="bannerimg" id="file"  class="enterInput">

 <label class="enterText enterArea">列表图预览:</label>
                   <p class="enterImg"><img id="previewImage" src="${pageContext.servletContext.contextPath}${banner.bigImg}"/></p>
                   <div class="Validform_checktip"></div>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值