Java实现上传(支持多个文件同时上传)和下载

文件上传一直是Web项目中必不可少的一项功能。

项目结构如下:(这是我之前创建的SSM整合的框架项目,在这上面添加文件上传与下载)

Java实现上传(支持多个文件同时上传)和下载_第1张图片

主要的是FileUploadController,doupload.jsp,up.jsp,springmvc.xml

1.先编写up.jsp

上传者:

选择文件:

选择文件:

以上便是up.jsp的核心代码;

2.编写doupload.jsp

<%
	request.setCharacterEncoding("utf-8");
	String uploadFileName = ""; //上传的文件名
	String fieldName = "";  //表单字段元素的name属性值
	//请求信息中的内容是否是multipart类型
	boolean isMultipart = ServletFileUpload.isMultipartContent(request);
	//上传文件的存储路径(服务器文件系统上的绝对文件路径)
	String uploadFilePath = request.getSession().getServletContext().getRealPath("upload/" );
	if (isMultipart) {
		FileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(factory);
		try {
			//解析form表单中所有文件
			List items = upload.parseRequest(request);
			Iterator iter = items.iterator();
			while (iter.hasNext()) {   //依次处理每个文件
				FileItem item = (FileItem) iter.next();
				if (item.isFormField()){  //普通表单字段
					fieldName = item.getFieldName();   //表单字段的name属性值
					if (fieldName.equals("user")){
						//输出表单字段的值
						out.print(item.getString("UTF-8")+"上传了文件。
"); } }else{ //文件表单字段 String fileName = item.getName(); if (fileName != null && !fileName.equals("")) { File fullFile = new File(item.getName()); File saveFile = new File(uploadFilePath, fullFile.getName()); item.write(saveFile); uploadFileName = fullFile.getName(); out.print("上传成功后的文件名是:"+uploadFileName); out.print("\t\t下载链接:"+""+uploadFileName+""); out.print("
"); } } } } catch (Exception e) { e.printStackTrace(); } } %>

该页面主要是内容是,通过解析request,并设置上传路径,创建一个迭代器,先进行判空,再通过循环来实现多个文件的上传,再输出文件信息的同时打印文件下载路径。

效果图:

Java实现上传(支持多个文件同时上传)和下载_第2张图片

Java实现上传(支持多个文件同时上传)和下载_第3张图片

3.编写FilterController实现文件下载的功能(相对上传比较简单):

@Controller
public class FileUploadController {
	@RequestMapping(value="/download")
	public ResponseEntity download(HttpServletRequest request,HttpServletResponse response,@RequestParam("name") String filename)throws Exception {    
		//下载显示的文件名,解决中文名称乱码问题  
		filename=new String(filename.getBytes("iso-8859-1"),"UTF-8");
		//下载文件路径
		String path = request.getServletContext().getRealPath("/upload/");
		File file = new File(path + File.separator + filename);
		HttpHeaders headers = new HttpHeaders();  
		//下载显示的文件名,解决中文名称乱码问题  
		String downloadFielName = new String(filename.getBytes("iso-8859-1"),"UTF-8");
		//通知浏览器以attachment(下载方式)打开图片
		headers.setContentDispositionFormData("Content-Disposition", downloadFielName); 
		//application/octet-stream : 二进制流数据(最常见的文件下载)。
		headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
		return new ResponseEntity(FileUtils.readFileToByteArray(file),    
				headers, HttpStatus.CREATED);  
	}
}

4.实现上传文件的功能还需要在springmvc中配置bean:

  
        
          
            10485760  
          
        
        
            UTF-8
        
    

完整代码如下:

up.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>



  
    File控件
  
  
  
   

上传者:

选择文件:

选择文件:

doupload.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@page import="java.io.*,java.util.*"%>
<%@page import="org.apache.commons.fileupload.*"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>




上传处理页面


<%
	request.setCharacterEncoding("utf-8");
	String uploadFileName = ""; //上传的文件名
	String fieldName = "";  //表单字段元素的name属性值
	//请求信息中的内容是否是multipart类型
	boolean isMultipart = ServletFileUpload.isMultipartContent(request);
	//上传文件的存储路径(服务器文件系统上的绝对文件路径)
	String uploadFilePath = request.getSession().getServletContext().getRealPath("upload/" );
	if (isMultipart) {
		FileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(factory);
		try {
			//解析form表单中所有文件
			List items = upload.parseRequest(request);
			Iterator iter = items.iterator();
			while (iter.hasNext()) {   //依次处理每个文件
				FileItem item = (FileItem) iter.next();
				if (item.isFormField()){  //普通表单字段
					fieldName = item.getFieldName();   //表单字段的name属性值
					if (fieldName.equals("user")){
						//输出表单字段的值
						out.print(item.getString("UTF-8")+"上传了文件。
"); } }else{ //文件表单字段 String fileName = item.getName(); if (fileName != null && !fileName.equals("")) { File fullFile = new File(item.getName()); File saveFile = new File(uploadFilePath, fullFile.getName()); item.write(saveFile); uploadFileName = fullFile.getName(); out.print("上传成功后的文件名是:"+uploadFileName); out.print("\t\t下载链接:"+""+uploadFileName+""); out.print("
"); } } } } catch (Exception e) { e.printStackTrace(); } } %>

FileUploadController.java

package ssm.me.controller;

import java.io.File;
import java.net.URLDecoder;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import org.junit.runners.Parameterized.Parameter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;


@Controller
public class FileUploadController {
	@RequestMapping(value="/download")
	public ResponseEntity download(HttpServletRequest request,HttpServletResponse response,@RequestParam("name") String filename)throws Exception {    
		//下载显示的文件名,解决中文名称乱码问题  
		filename=new String(filename.getBytes("iso-8859-1"),"UTF-8");
		//下载文件路径
		String path = request.getServletContext().getRealPath("/upload/");
		File file = new File(path + File.separator + filename);
		HttpHeaders headers = new HttpHeaders();  
		//下载显示的文件名,解决中文名称乱码问题  
		String downloadFielName = new String(filename.getBytes("iso-8859-1"),"UTF-8");
		//通知浏览器以attachment(下载方式)打开图片
		headers.setContentDispositionFormData("Content-Disposition", downloadFielName); 
		//application/octet-stream : 二进制流数据(最常见的文件下载)。
		headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
		return new ResponseEntity(FileUtils.readFileToByteArray(file),    
				headers, HttpStatus.CREATED);  
	}
}

SpringMVC.xml(仅供参考,有的地方不可以照搬)



        
        
     	
     	
        
        
		  
        
          
            10485760  
          
        
        
            UTF-8
        
    

        

web.xml(仅供参考,有的地方不可以照搬)



  Student
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
 
  	springmvc
  	org.springframework.web.servlet.DispatcherServlet
  
  
  	contextConfigLocation
  	classpath:springmvc.xml
  
    1
  
  
 	springmvc
 	*.action
 
  
 		contextConfigLocation
		classpath:spring/applicationContext-*.xml
 
  
    org.springframework.web.context.ContextLoaderListener
  

以上变为文件上传和下载的全部代码,博主亲测过,没有问题。

你可能感兴趣的:(java)