图片上传处理
1,配置虚拟目录
由于图片常用的需要静态的访问环境,tomcat开虚拟目录的方式做了几次都失败了,所以我做做了一个apache的服务,将apache的启动路径设置为我存放上传文件的位置。
这图显示了需要改的路径,然后启动apache,测试一下localhost的访问是否可以。
2,配置解析器
!-- 文件上传 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
3,使用一个上传组件uploadfy(h5)
关于上传组件的内容我做了一个关于uploadfy的小例子。
这个组件是在csdn上下载的,依赖不粘贴了,看一下jsp的代码。
<form>
<input id="file_upload" name="file_upload" type="file" multiple="true">
<a style="position: relative; top: 3%;" href="javascript:$('#file_upload').uploadifive('upload')">UploadFiles</a>
<div id="queue" ></div>
<img id="result" alt="" src="">
</form>
$(function() {
$('#file_upload').uploadifive({
'auto' : false,
'queueID' : 'queue',
'uploadScript' : 'file/onefile',
'onUploadComplete' : function(file, data) {
var jsonData =JSON.parse(data);
alert(jsonData);
$('#result').attr("src",jsonData.data);
}
});
});
在html中,input代表了可选的上传组件,在js中设置了上传方法和回调。在看一下controller
@RequestMapping("/onefile")
@ResponseBody
public RemmoResult oneFileUpload(MultipartHttpServletRequest request, HttpServletResponse response) {
//1. build an iterator
Iterator<String> itr = request.getFileNames();
CommonsMultipartFile file=null;
//2. get each file
while(itr.hasNext()){
//2.1 get next MultipartFile
file = (CommonsMultipartFile) request.getFile(itr.next());
System.out.println(file.getOriginalFilename() +" uploaded! ");
String fileName = file.getOriginalFilename();
System.out.println("原始文件名:" + fileName);
// 新文件名
String newFileName = UUID.randomUUID() + fileName;
// 获得项目的路径
ServletContext sc = request.getSession().getServletContext();
// 上传位置
// String path = sc.getRealPath("/img") + "\\"; // 设定文件保存的目录
File f = new File(path);
if (!f.exists())
f.mkdirs();
if (!file.isEmpty()) {
try {
FileOutputStream fos = new FileOutputStream(path + newFileName);
InputStream in = file.getInputStream();
int b = 0;
while ((b = in.read()) != -1) {
fos.write(b);
}
fos.close();
in.close();
return RemmoResult.ok("http://localhost/"+newFileName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return null;
}
我们使用MultipartHttpServletRequest来接传过来的数据,获得数组后再循环遍历,将这个文件写到我们的设置的apache的路径中,我用了一个共同的返回值,这个返回值是一个
{
"status":"0",
"msg":"",
"data":"返回数据"
}
这种类型的对象,在前端可以接到json字符串,转成json对象后就可以直接使用了。
这里主要就是记录一下上传的功能,一个具体的上传组件,我还需要再封装一下。初学者弄起来还是不容易啊。