上传图片大致处理 包含工具类

private static String  basePath   =  Thread.currentThread().getContextClassLoader().getResource("").getPath();

这句话basePath等同于resources下的路径。

需要用到的坐标:

<dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.8</version>
</dependency>

<dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.2</version>
 </dependency>

----

在spring-web.xml中设置上传文件解析器(不设置request得不到值)

<!-- 定义一个文件上传解析器     如果没有这解析器 那么request后台接受不到参数-->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="utf-8"></property>
		<property name="maxUploadSize" value="20971520"></property>
		<property name="maxInMemorySize" value="20971520"></property>
</bean>

页面的js:


$(function(){
	
	
	var registerShopUrl = '/o2o/shopadmin/registerShop';
		
		//点击注册:
		$("#submit").click(function(){
			
			var  shop  ={};
			shop.shopName =$('#shop-name').val();
			shop.shopAddr =$('#shop-addr').val();
			shop.phone=$('#phone').val();
			shop.shopDesc=$('#shop-desc').val();
			shop.shopCategory={
					shopCategoryId:$('#shop-category').find('option').not(function(){
						return !this.selected;
					}).data('id')
			};
			shop.area={
					areaId:$('#area').find('option').not(function(){
						return !this.selected;
					}).data('id')
					
			};
			var shopImg =$('#shop-img')[0].files[0];
			var verifyCode = $('#j_captcha').val();  //
			if(verifyCode==''){
				$.toast('请输入验证码');
				return;
			}
			var formData=new FormData();
			formData.append('verifyCode',verifyCode);
			formData.append('shopImg',shopImg);
			formData.append('shopStr',JSON.stringify(shop));  //js对象转换为json
			$.ajax({
				url : registerShopUrl,
				type:'POST',
				data:formData,
				contentType:false,
				processData:false,
				cache:false,
				success:function(data){
					if(data.success){
						$.toast("提交注册成功!");
					}else{
						$.toast("提交失败!"+data.errMsg);
					}
					$('#captcha_img').click();
				}
			});
		});
		
		
	}
	
	

	
});

后台代码:

@RequestMapping(value = "/registerShop", method = RequestMethod.POST)
	@ResponseBody
	private Map<String, Object> registerShop(HttpServletRequest request) {
		
		Map<String, Object> modelMap = new HashMap<String, Object>();
		// i接受参数并转化为相应的参数,包括店铺信息 和店铺图片

		if (!CodeUtil.checkVerifyCode(request)) {
			modelMap.put("success", false);
			modelMap.put("errMsg", "你的验证码错误  !看仔细一点嘛瓜皮");
			return modelMap;

		}

		String shopStr = HttpServletRequestUtil.getString(request, "shopStr");
		ObjectMapper obejctMapper = new ObjectMapper();
		Shop shop = null;
		try {

			shop = obejctMapper.readValue(shopStr, Shop.class);

		} catch (Exception e) {
			e.printStackTrace();
			modelMap.put("success", false);
			modelMap.put("errMsg", e.getMessage());
			return modelMap;

		}
		// 处理图片相关
		CommonsMultipartFile shopImg = null;
		CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(
				request.getSession().getServletContext());
		if (commonsMultipartResolver.isMultipart(request)) {
			MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
			shopImg = (CommonsMultipartFile) multipartHttpServletRequest.getFile("shopImg");

		} else {
			modelMap.put("success", false);
			modelMap.put("errMsg", "上传的图片不能为空");
			return modelMap;
		}

		// ii注册店铺
		if (shop != null && shopImg != null) {
			PersonInfo owner = new PersonInfo();
			owner.setUserId(1l);
			// Session TODO
			shop.setOwner(owner);

			// 保存数据库
			ShopExecution se;
			try {
				se = shopService.addShop(shop, shopImg.getInputStream(), shopImg.getOriginalFilename());
				if (se.getState() == ShopStateEnum.CHECK.getState()) {
					modelMap.put("success", true);

				} else {
					modelMap.put("success", false);
					modelMap.put("errMsg", se.getStateInfo());
				}

			} catch (ShopOperationExcetion e) {
				modelMap.put("success", false);
				modelMap.put("errMsg", e.getMessage());
			} catch (IOException e) {
				modelMap.put("success", false);
				modelMap.put("errMsg", e.getMessage());
			}

		} else {
			modelMap.put("success", false);
			modelMap.put("errMsg", "请输入店铺信息");
			return modelMap;
		}
		return modelMap;
	}
	@Override
	@Transactional
	public ShopExecution addShop(Shop shop, InputStream shopImgInputStream,String fileName) {
		
		if(shop == null ){
			return new ShopExecution(ShopStateEnum.NULL_SHOP);
		}
		try {
			shop.setCreateTime(new Date());
			shop.setLastEditTime(new Date());
			shop.setEnableStatus(0);  //0:未通过审核
			int effectedNum = shopDao.insertShop(shop);
			if(effectedNum<=0){
				throw new ShopOperationExcetion("店铺创建失败");
			}else{
				if(shopImgInputStream!=null){
					try {
						//存图片
						addShopImg(shop,shopImgInputStream,fileName);
					} catch (Exception e) {
						throw new ShopOperationExcetion("addShopImg error"+e.getMessage());
					}
					
					//更新shop库的图片地址
					effectedNum = shopDao.updateShop(shop);
					if(effectedNum<=0){
						throw new ShopOperationExcetion("更新图片地址失败");
					}
					
					
				}
			}
			
			 
		} catch (Exception e) {
			throw new ShopOperationExcetion("addShop error:"+e.getMessage());
			
		}
		
		return new ShopExecution(ShopStateEnum.CHECK,shop);
	}
	private void addShopImg(Shop shop, InputStream shopImgInputStream,String fileName) {
	
		
		String dest = PathUtil.setShopImagePath(shop.getShopId());	//设置并且获取shop图片目录的相对值路径
		String shopImgAddr = ImageUtil.generateThumBnail(shopImgInputStream, fileName,dest);  //返回的是相对路径
		shop.setShopImg(shopImgAddr);
		
}
/**
	 * 图片的相对路径
	 * @param shopId
	 * @return
	 */
	public static String setShopImagePath(long shopId){
		String path  ="/update/item/shop/"+shopId+"/";
		
		String returnPath =path.replace("/", separator) ;
		return returnPath; 
	}
	
	
public class ImageUtil {
	private static String  basePath   =  Thread.currentThread().getContextClassLoader().getResource("").getPath();
	
	private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
	private static final Random random = new Random();
	private static Logger logger   =LoggerFactory.getLogger(ImageUtil.class);
	/**
	 * CommonsMultipartFile  转换为 File
	 * @param CommonsMultipartFile cFile
	 * @return  newFile
	 */
	public static  File transferCommonsMultipartFileToFile(CommonsMultipartFile cFile){
		File newFile = new File(cFile.getOriginalFilename());
		try {
			cFile.transferTo(newFile);
		} catch (IllegalStateException | IOException e) {
			logger.error(e.toString());
			e.printStackTrace();
		}
		
		return newFile;
		
		
	}
	/**
	 * 处理缩略图,并返回新生成的图片的相对路径 。
	 * @param thumBnail  输入的File
	 * @param targetAddr  设置的图片相对位置
	 * @return
	 */
	public static String generateThumBnail(InputStream thumBnail, String fileName,String targetAddr) {
		String randomFileName = getRandFileName();
		String extension = getFileExtenSion(fileName);
		makeDirPath(targetAddr);
		//得到相对路径
		String relativeFileAddr = targetAddr + randomFileName + extension;
		logger.debug("相对路径:"+relativeFileAddr);
		logger.debug("绝对路径"+PathUtil.getBasePath()+relativeFileAddr);
		//创建并压缩这里是绝对路径
		File dest = new File(PathUtil.getBasePath() + relativeFileAddr);
		
		try {
			Thumbnails.of(thumBnail).size(200, 200).watermark(Positions.BOTTOM_RIGHT,
					ImageIO.read(new File(basePath + "/watermark.jpg")), 0.25f).outputQuality(0.8f).toFile(dest);
			

		} catch (IOException e) {
			// TODO: handle exception
			logger.error(e.toString());
			e.printStackTrace();
		}
	
		return relativeFileAddr;

	}

	/**
	 * 创建目标路径所涉及到的目录。
	 * 
	 * @param targetAddr
	 */
	private static void makeDirPath(String targetAddr) {
		// TODO Auto-generated method stub
		String realFilePath = PathUtil.getBasePath() + targetAddr;
		File file = new File(realFilePath);
		if (!file.exists()) {
			file.mkdirs();
		}
	}

	/**
	 * 获得输入流的文件扩展名
	 * 
	 * @param thumBnail
	 * @return
	 */
	private static String getFileExtenSion(String thumBnail) {
		// TODO Auto-generated method stub

		return thumBnail.substring(thumBnail.lastIndexOf("."));

	}

	/**
	 * 生成一个随机的年月日时分秒+五位的随机数
	 * 
	 * @return
	 */
	@Test
	public static String getRandFileName() {
		// TODO Auto-generated method stub
		String nowTimeStr = simpleDateFormat.format(new Date());
		int randomStr = random.nextInt(89999) + 10000; // 10000-99999 随机的五位数字
		return nowTimeStr + randomStr;

	}
	/**
	 * storePath 如果是目录的话 则删除这个目录下面的所有的文件 
	 * storePath 如果是文件的话 则删除这个文件。
	 * @param shopImg
	 */
	public static void deleteFileOrPath(String storePath) {
			File fileOrPath   = new File(PathUtil.getBasePath()+storePath);
			if(fileOrPath.isDirectory()){ //判断是否为文件夹
				File[] listFiles = fileOrPath.listFiles();
				for (int i = 0; i < listFiles.length; i++) {
					listFiles[i].delete();
				}
			}
			fileOrPath.delete();
			
		
	}

}

public class PathUtil {
	private static String separator = System.getProperty("file.separator");

	/**
	 * 取出的时候 用到的绝对路径
	 * @return
	 */
	public static String getBasePath(){
		String system = System.getProperty("os.name");
		String path = "";
		if(system.toLowerCase().startsWith("win")){
			 path="D:/ssm_boot_Project/picture";
			 
		}else{
			path="/home/xiangze/image/";
		}
		
		 path  =path.replace("/",separator);
		return  path ;
	} 
	
	/**
	 * 图片的相对路径
	 * @param shopId
	 * @return
	 */
	public static String setShopImagePath(long shopId){
		String path  ="/update/item/shop/"+shopId+"/";
		
		String returnPath =path.replace("/", separator) ;
		return returnPath; 
	}
	
	
	
	
	

猜你喜欢

转载自blog.csdn.net/Demo1109/article/details/88856927