Spring实现文件上传
2014-11-02 20:21
197 查看
Spring在使用文件上传需要在SpringMVC-servlet.xml中配置:
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- set the max upload size100MB -->
<property name="maxUploadSize">
<value>104857600</value>
</property>
<property name="maxInMemorySize">
<value>4096</value>
</property>
</bean>
我们首先实现跳转方式的文件上传
实例: *.jsp
<form action="fileUpload" method="post" enctype="multipart/form-data">
img:<input type="file" name="img" /><br/>
<input type="submit" value="上传" />
</form>
fileUploadController.java
package controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
@Controller
public class FileUploadController {
@RequestMapping("/fileUpload")
public String fileUpload(HttpServletRequest request,@RequestParam("img")
MultipartFile file) throws IOException
{
//如果在这里要实现多文件上传 ,就可以这样注解 :@RequestParam("img") List<MultipartFile> list, 那么在前端就有多个name为“img” 的file
@SuppressWarnings("deprecation")
String path=request.getRealPath("file");
InputStream is=file.getInputStream();
OutputStream os=new FileOutputStream(new File(path,file.getOriginalFilename()));
byte[] buffer=new byte[400];
int length=0;
while(-1!=(length=is.read(buffer)))
{
os.write(buffer);
System.out.println(buffer+"----------------");
}
is.close();
os.close();
return "fileOk";
}
}
2 . 使用$.ajaxFileUpload实现不跳转页面的文件上传
此时,我们需要使用jquery.js和ajaxfileupload.js两个文件
实例:
<script type="text/javascript" src="source/jquery.js"></script>
<script type="text/javascript" src="source/ajaxfileupload.js"></script>
<script type="text/javascript">
function fileUpload() {
$.ajaxFileUpload({
url:"ajaxfileUpload",
secureuri:false,
type:"POST",
fileElementId:"file",
dataType:"json",
success:function(data)
{
alert(data.result);
},
error:function()
{
alert("上传失败");
}
});
return false;
}
</script>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file"/><br/>
<input type="button" value="upload" onclick="return fileUpload();"/>
</form>
</body>
在这里需要注意,我们使用两个静态的外部资源文件 ,就需要在SpringMVC-Servlet.xml 中配置
<mvc:resources location="/source/*" mapping="/source/**"/>
AjaxFileUploadController.java
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class AjaxFileUpload {
//@ResponseBody
@RequestMapping(value="/ajaxfileUpload")
public String fileUpload(@RequestParam("file") MultipartFile file,HttpServletRequest req,HttpServletResponse resp) throws IOException
{
System.out.println("-----------------");
System.out.println(file.getOriginalFilename());
InputStream is=null;
FileOutputStream os=null;
try {
is=file.getInputStream();
String path=req.getSession().getServletContext().getRealPath("file");
os=new FileOutputStream(new File(path,file.getOriginalFilename()));
byte[] buffer=new byte[400];
int length=0;
while(-1!=(length=is.read(buffer)))
{
os.write(buffer);
System.out.println(new String(buffer));
}
} catch (IOException e) {
e.printStackTrace();
}
is.close();
os.close();
resp.getWriter().println("{\"result\":\"fileUploadOk\"}");
return null;
// return "{\"result\":\"fileUploadOk\"}";
}
}
我们从以上两个实例看出在接受文件时,使用的时MultipartFile直接来接受,其实我们还可以使用MultipartHttpServletRequest来处理,通过将HttpServletRequest来cast to MultipartHttpServetRequest
即:HttpServletRequest request=.....
MultipartHttpServletRequest mhr=(MultipartHttpServletRequest)request;
然后使用: mhr.getFile() 获得MultipartFile
mhr.getFiles()获得List<MultipartFile>
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- set the max upload size100MB -->
<property name="maxUploadSize">
<value>104857600</value>
</property>
<property name="maxInMemorySize">
<value>4096</value>
</property>
</bean>
我们首先实现跳转方式的文件上传
实例: *.jsp
<form action="fileUpload" method="post" enctype="multipart/form-data">
img:<input type="file" name="img" /><br/>
<input type="submit" value="上传" />
</form>
fileUploadController.java
package controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
@Controller
public class FileUploadController {
@RequestMapping("/fileUpload")
public String fileUpload(HttpServletRequest request,@RequestParam("img")
MultipartFile file) throws IOException
{
//如果在这里要实现多文件上传 ,就可以这样注解 :@RequestParam("img") List<MultipartFile> list, 那么在前端就有多个name为“img” 的file
@SuppressWarnings("deprecation")
String path=request.getRealPath("file");
InputStream is=file.getInputStream();
OutputStream os=new FileOutputStream(new File(path,file.getOriginalFilename()));
byte[] buffer=new byte[400];
int length=0;
while(-1!=(length=is.read(buffer)))
{
os.write(buffer);
System.out.println(buffer+"----------------");
}
is.close();
os.close();
return "fileOk";
}
}
2 . 使用$.ajaxFileUpload实现不跳转页面的文件上传
此时,我们需要使用jquery.js和ajaxfileupload.js两个文件
实例:
<script type="text/javascript" src="source/jquery.js"></script>
<script type="text/javascript" src="source/ajaxfileupload.js"></script>
<script type="text/javascript">
function fileUpload() {
$.ajaxFileUpload({
url:"ajaxfileUpload",
secureuri:false,
type:"POST",
fileElementId:"file",
dataType:"json",
success:function(data)
{
alert(data.result);
},
error:function()
{
alert("上传失败");
}
});
return false;
}
</script>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file"/><br/>
<input type="button" value="upload" onclick="return fileUpload();"/>
</form>
</body>
在这里需要注意,我们使用两个静态的外部资源文件 ,就需要在SpringMVC-Servlet.xml 中配置
<mvc:resources location="/source/*" mapping="/source/**"/>
AjaxFileUploadController.java
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class AjaxFileUpload {
//@ResponseBody
@RequestMapping(value="/ajaxfileUpload")
public String fileUpload(@RequestParam("file") MultipartFile file,HttpServletRequest req,HttpServletResponse resp) throws IOException
{
System.out.println("-----------------");
System.out.println(file.getOriginalFilename());
InputStream is=null;
FileOutputStream os=null;
try {
is=file.getInputStream();
String path=req.getSession().getServletContext().getRealPath("file");
os=new FileOutputStream(new File(path,file.getOriginalFilename()));
byte[] buffer=new byte[400];
int length=0;
while(-1!=(length=is.read(buffer)))
{
os.write(buffer);
System.out.println(new String(buffer));
}
} catch (IOException e) {
e.printStackTrace();
}
is.close();
os.close();
resp.getWriter().println("{\"result\":\"fileUploadOk\"}");
return null;
// return "{\"result\":\"fileUploadOk\"}";
}
}
我们从以上两个实例看出在接受文件时,使用的时MultipartFile直接来接受,其实我们还可以使用MultipartHttpServletRequest来处理,通过将HttpServletRequest来cast to MultipartHttpServetRequest
即:HttpServletRequest request=.....
MultipartHttpServletRequest mhr=(MultipartHttpServletRequest)request;
然后使用: mhr.getFile() 获得MultipartFile
mhr.getFiles()获得List<MultipartFile>
相关文章推荐
- 基于Spring3 MVC实现基于HTML form表单文件上传
- java简单多线程方式+实现文件上传(spring mvc + jquery.form.js 框架)
- Spring-MVC框架实现文件的上传、修改、下载
- spring 文件上传功能实现
- SpringMVC+ajaxfileupload.js实现文件无刷新上传
- 基于Spring3 MVC实现基于HTML form表单文件上传
- Spring中MultipartHttpServletRequest实现文件上传
- springMVC+uploadify实现文件异步上传
- (下节)Spring+JDBC+Struts;实现图片上传(后台文件名要规范),加国际化;头文件basepath确保路径从webroot开始;
- Spring实现文件上传(示例代码)
- Spring 实现文件上传与下载
- 用Spring实现文件上传(CommonsMultipartFile)!
- spring+jpg环境下,spring实现文件上传
- spring mvc +uploadify2.1 实现文件上传
- Spring中实现文件上传
- 基于Spring3 MVC实现基于HTML form表单文件上传
- ajaxfileupload.js+springMVC实现无刷新文件上传
- Spring中MultipartHttpServletRequest实现文件上传
- FTP+SpringMVC+Uploadify实现带进度条多文件上传
- springmvc + ajaxfileupload 实现异步上传文件(图片)