springmvc+maven文件的上传下载
直接上代码
//先从导包开始
1:导包
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
2:applicationContext.xml
<context:component-scan base-package="com.hellojava"></context:component-scan>
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--上传的组件的属性-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="10000000000"></property>
</bean>
3:web.xml
//编码过滤
<filter>
<filter-name>characterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
//控制器
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
4:创建上传文件的页面和下载文件的页面
//上传
注意:enctype="multipart/form-data"
<form action="uploadHandler" method="post" enctype="multipart/form-data">
文件:<input type="file" name="uploadFile"><br/>
<input type="submit" value="上传">
</form>
//下载
<body>
<h2>Hello World!</h2>
<c:forEach items="${requestScope.files}" var="f">
<form action="downloadHandler" method="post">
<c:out value="${f}"></c:out>
<input type="hidden" name="fileName" value="${f}">
<input type="submit" value="下载">
</form>
</c:forEach>
</body>
5:创建处理文件上传的Controller的RequestMapping的方法
@Controller
public class FileController {
@RequestMapping("/uploadview")
public String uploadView() {
return "upload";
}
@RequestMapping("/uploadHandler")
public String uploadHandler(MultipartFile uploadFile, HttpServletRequest request) {
//request.getServletContext() ServletContext (application)
String path = request.getServletContext().getRealPath("/upload");
File uploadRoot = new File(path);
if (!uploadRoot.exists()) {
uploadRoot.mkdirs();
}
try {
InputStream inputStream = uploadFile.getInputStream();
byte[] bs = new byte[inputStream.available()];
inputStream.read(bs, 0, bs.length);
inputStream.close();
OutputStream outputStream = new FileOutputStream(uploadRoot + "/" + uploadFile.getOriginalFilename());
outputStream.write(bs, 0, bs.length);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
//上传成功
return "redirect:loadUploadFile";
}
@RequestMapping("/loadUploadFile")
public String loadUploadFile(HttpServletRequest request, Model model) {
File fileRoot=new File(request.getServletContext().getRealPath("/upload"));
String result="error";
if(fileRoot.exists()){
String[] fs=fileRoot.list();
model.addAttribute("files",fs);
result="index";
}
return result;
}
@RequestMapping("/downloadHandler")
public ResponseEntity<byte[]> downLoadHandler(String fileName,HttpServletRequest request){
File fileRoot=new File(request.getServletContext().getRealPath("/upload"));
String result="error";
//http请求的头信息对象
HttpHeaders headers = new HttpHeaders();
//设置下载的文件名
System.out.println(fileName);
headers.setContentDispositionFormData("attachment", fileName);
//设置下载的内容类型
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
ResponseEntity<byte[]> entity=null;
byte[] bs=null;
if(fileRoot.exists()){
try {
FileInputStream fis = new FileInputStream(fileRoot + "/" + fileName);
bs = new byte[fis.available()];
fis.read(bs, 0, bs.length);
fis.close();
}catch (IOException e){
e.printStackTrace();
}
entity=new ResponseEntity<>(bs,headers, HttpStatus.CREATED);
}
return entity;
}
}
为了文件名字不冲突和不覆盖问价 可以使用UUID>>
String uuid = UUID.randomUUID().toString().replace("-", “”);
这里是用空格代替生成的“-”
上代码
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
public class UpImgServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String path = getServletContext().getRealPath("/up");
DiskFileItemFactory disk = new DiskFileItemFactory(102410,new File("d:/a"));
ServletFileUpload up = new ServletFileUpload(disk);
try{
List list = up.parseRequest(request);
//只接收图片.jpg-iamge/jpege.,bmp/imge/bmp,png,
List imgs = new ArrayList();
for(FileItem file :list){
if(file.getContentType().contains("image/")){
String fileName = file.getName();
fileName = fileName.substring(fileName.lastIndexOf("")+1); //获取扩展
String extName = fileName.substring(fileName.lastIndexOf("."));//.jpg
//UUID
String uuid = UUID.randomUUID().toString().replace("-", "");
//新名称
String newName = uuid+extName;//在这里用UUID来生成新的文件夹名字,这样就不会导致重名
FileUtils.copyInputStreamToFile(file.getInputStream(),
new File(path+"/"+newName));
//放到list
imgs.add(newName);
}
file.delete();
}
request.setAttribute("imgs",imgs);
request.getRequestDispatcher("/jsps/imgs.jsp").forward(request, response);
}catch(Exception e){
e.printStackTrace();
}
}
}