实现springMVC + jsp + ajax 上传文件
三种方式:
配置在beans.xml中加入:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600" />
<property name="maxInMemorySize" value="4096" />
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
在web.xml中的1下方加入
<!-- 文件上传必须配置 -->
<multipart-config></multipart-config>
pom.xml中加入依赖:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
Html:
<form name="Form1" action="fileUpload" method="post" enctype="multipart/form-data">
<h1>采用流的方式上传文件</h1>
<input type="file" name="file">
<input type="submit" value="upload"/>
</form>
<form name="Form2" action="fileUpload2" method="post" enctype="multipart/form-data">
<h1>采用multipart提供的file.transfer方法上传文件</h1>
<input type="file" name="file">
<input type="submit" value="upload"/>
</form>
<form name="Form2" action="springUpload" method="post" enctype="multipart/form-data">
<h1>使用spring mvc提供的类的方法上传文件</h1>
<input type="file" name="file">
<input type="submit" value="upload"/>
</form>
<form name="Form1" action="filesave" method="post" enctype="multipart/form-data">
<h1>采用流的方式上传文件</h1>
<input type="file" name="file">
<input type="submit" value="upload"/>
</form>
ajax上传
<script type="text/javascript">
function select() {
$('#fi1').click();
$('#fi1').change(function(){
var formData = new FormData(form2);
$.ajax({
url: 'fileupload3' ,
type: 'POST',
data: formData,
contentType: false,
processData: false,
success: function (returndata) {
}
});
});
}
</script>
<form name="Form2" id="form2" action="fileupload3" method="post" enctype="multipart/form-data">
<img onclick="select()" src="theme/addpi/addpicture.jpg" id="big_img" width="418" height="418">
<input type="file" name="file" id="fi1" hidden="hidden">
</form>
Controller:
/*
* 通过流的方式上传文件
* @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
*/
@RequestMapping("fileUpload")
public String fileUpload(@RequestParam("file") CommonsMultipartFile file) throws IOException {
//用来检测程序运行时间
long startTime=System.currentTimeMillis();
System.out.println("fileName:"+file.getOriginalFilename());
try {
//获取输出流
OutputStream os=new FileOutputStream("E:/"+UUID.randomUUID()+file.getOriginalFilename());
//获取输入流 CommonsMultipartFile 中可以直接得到文件的流
InputStream is=file.getInputStream();
int temp;
//一个一个字节的读取并写入
while((temp=is.read())!=(-1))
{
os.write(temp);
}
os.flush();
os.close();
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long endTime=System.currentTimeMillis();
System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");
return "null";
}
/*
* 采用file.Transto 来保存上传的文件
*/
@RequestMapping("fileUpload2")
public String fileUpload2(@RequestParam("file") CommonsMultipartFile file) throws IOException {
long startTime=System.currentTimeMillis();
System.out.println("fileName:"+file.getOriginalFilename());
String path="E:/"+UUID.randomUUID()+file.getOriginalFilename();
File newFile=new File(path);
//通过CommonsMultipartFile的方法直接写文件(注意这个时候)
file.transferTo(newFile);
long endTime=System.currentTimeMillis();
System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");
return null;
}
/*
*采用spring提供的上传文件的方法
*/
@RequestMapping("springUpload")
public String springUpload(HttpServletRequest request) throws IllegalStateException, IOException
{
long startTime=System.currentTimeMillis();
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request))
{
//将request变成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
//获取multiRequest 中所有的文件名
Iterator iter=multiRequest.getFileNames();
System.out.println(iter);
while(iter.hasNext())
{
//一次遍历所有文件
MultipartFile file=multiRequest.getFile(iter.next().toString());
if(file!=null)
{
System.out.println(file.getOriginalFilename());
String path="E:/"+UUID.randomUUID()+file.getOriginalFilename();
//上传
file.transferTo(new File(path));
}
}
}
long endTime=System.currentTimeMillis();
System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");
return null;
}
@RequestMapping("fileupload3")
public String fileupload(HttpServletRequest request,HttpServletResponse response) throws Exception {
//获取服务器中保存文件的路径
String path = request.getSession().getServletContext().getRealPath("")+"\\theme\\addpi\\";
System.out.println(path);
//获取解析器
CommonsMultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//判断是否是文件
System.out.println("1");
System.out.println(resolver.isMultipart(request));
if(resolver.isMultipart(request)){
//进行转换
System.out.println("2");
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)(request);
//获取所有文件名称
Iterator<String> it = multiRequest.getFileNames();
while(it.hasNext()){
//根据文件名称取文件
MultipartFile file = multiRequest.getFile(it.next().toString());
String fileName = UUID.randomUUID()+file.getOriginalFilename();
System.out.println(fileName);
String localPath = path + fileName;
//创建一个新的文件对象,创建时需要一个参数,参数是文件所需要保存的位置
File newFile = new File(localPath);
if (newFile.getParentFile() != null || !newFile.getParentFile().isDirectory()) {
// 创建父文件夹
newFile.getParentFile().mkdirs();
}
//上传的文件写入到指定的文件中
file.transferTo(newFile);
}
}
return null;
}
@PostMapping("filesave")
public String register(@RequestParam("file") MultipartFile file,MultipartHttpServletRequest request) throws IOException
{
System.out.println("5");
//获取初始文件名
String filename=file.getOriginalFilename();
System.out.println(filename);
//将选择的文件保存到指定的目录
file.transferTo(new File("E:/img/"+filename));
return null;
}
最终结果是将选中的文件上传保存到了E/下,如果需要保存到项目工程的某个目录下可以使用
String path = request.getSession().getServletContext().getRealPath("")+"\theme\addpi\";获取路径,在于文件名拼接即可