Springmvc 上传图片

file 文件上传必须依赖表单,ajax不行!

<form  action="${path }/item/addBrand.do" method="post" enctype="multipart/form-data">
	<input type='file' οnchange='submitUpload()' />


创建 JS 方法 submitUpload()

function submitUpload(){
	var option = {
		url:"${path}/upload/uploadPic.do",//如果不写url就是默认使用要提交的表单中的url,如果有url就是使用该url
		dataType:"text",
		success:function(responseText){
			//把json格式字符串转换成json对象
			var jsonObj = $.parseJSON(responseText);
			$("#imgsImgSrc").attr("src", jsonObj.realPath);
			$("#imgs").val(jsonObj.relativePath);
			$("#lastPath").val(jsonObj.realPath);
		},
		error:function(){
			alert("系统错误");
		}
		
	};
	//ajax方式提交表单,页面不会跳转(由jQuery-form提供)
	$("#form111").ajaxSubmit(option);
}

在 springmvc.xml 中需要配置一个解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<property name="maxUploadSize" value="1024000"></property>
</bean>

未上传图片单独创建一个 Controller

@Controller
@RequestMapping("/upload")
public class EbUploadController {

	@RequestMapping("/uploadPic.do")
	public void uploadPic(HttpServletRequest request, PrintWriter out, String lastPath) throws IOException{

		//强制转换request,只有 MultipartHttpServletRequest 才能转换 file
		MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;

		//获得文件,即<input type="file" name=""/>中的值
		Iterator<String> iter = mr.getFileNames();
		String fileInputName = iter.next();
		MultipartFile mf = mr.getFile(fileInputName);

		//将获得的文件,转化为字节数组
		byte[] byteArr = mf.getBytes();
		//为了让文件名不重复,用“文件名 + 时间戳(精确到毫秒数) + 3位随机数”
		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 filePath = ECPSUtils.readProp("file_path");

		//获得上传文件的绝对路径
		String realPath = filePath + "/upload/"+fileName + suffix;
		String relativePath = "/upload/"+fileName + suffix;	<————此处是保存进DB的相对路径
										保存相对路径是防止后期主机地址变化

		//开始上传,这里借助 Jersey 框架。 Jersey 是专门做两台机器间通信的。
		Client client = Client.create();
		
		if(StringUtils.isNotBlank(lastPath)){
			WebResource wr1 = client.resource(lastPath);
			wr1.delete();
		}
		
		
		//创建Jersey客户端, 返回值是获得的服务器端位置信息					
		WebResource wr = client.resource(realPath);
		wr.put(byteArr);

		//ajax返回多个值的时候要使用JSON
		JSONObject jo = new JSONObject();
		jo.accumulate("realPath", realPath);
		jo.accumulate("relativePath", relativePath);

		//获得json格式的字符串——{"realPath":"http://.....", "relativePath":"/upload/..."}
		String result = jo.toString();
		out.write(result);
	}
}			


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值