如何在Java项目中实现一个文件上传和下载功能-创新互联

如何在Java项目中实现一个文件上传和下载功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

成都创新互联自2013年创立以来,是专业互联网技术服务公司,拥有项目成都做网站、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元桂阳做网站,已为上家服务,为桂阳各地企业和个人服务,联系电话:13518219792

项目结构如下:


如何在Java项目中实现一个文件上传和下载功能

主要的是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项目中实现一个文件上传和下载功能

如何在Java项目中实现一个文件上传和下载功能

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项目中实现一个文件上传和下载功能问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


文章名称:如何在Java项目中实现一个文件上传和下载功能-创新互联
当前网址:http://scyanting.com/article/hcjsg.html