文件上传一直是Web项目中必不可少的一项功能。
项目结构如下:(这是我之前创建的SSM整合的框架项目,在这上面添加文件上传与下载)
主要的是FileUploadController,doupload.jsp,up.l
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 = Session().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) ();
if (item.isFormField()){ //普通表单字段
fieldName = FieldName(); //表单字段的name属性值
if (fieldName.equals("user")){
//输出表单字段的值
out.String("UTF-8")+"上传了文件。
");
}
}else{ //文件表单字段
String fileName = Name();
if (fileName != null && !fileName.equals("")) {
File fullFile = new Name());
File saveFile = new File(uploadFilePath, Name());
item.write(saveFile);
uploadFileName = Name();
out.print("上传成功后的文件名是:"+uploadFileName);
out.print("tt下载链接:"+""+uploadFileName+"");
out.print("
");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
%>
该页面主要是内容是,通过解析request,并设置上传路径,创建一个迭代器,先进行判空,再通过循环来实现多个文件的上传,再输出文件信息的同时打印文件下载路径。
效果图:
3.编写FilterController实现文件下载的功能(相对上传比较简单):
@Controller
public class FileUploadController {
@RequestMapping(value="/download")
public ResponseEntity download(HttpServletRequest request,HttpServletResponse response,@RequestParam("name") String filename)throws Exception {
//下载显示的文件名,解决中文名称乱码问题
filename=new Bytes("iso-8859-1"),"UTF-8");
//下载文件路径
String path = ServletContext().getRealPath("/upload/");
File file = new File(path + File.separator + filename);
HttpHeaders headers = new HttpHeaders();
//下载显示的文件名,解决中文名称乱码问题
String downloadFielName = new Bytes("iso-8859-1"),"UTF-8");
//通知浏览器以attachment(下载方式)打开图片
headers.setContentDispositionFormData("Content-Disposition", downloadFielName);
//application/octet-stream : 二进制流数据(最常见的文件下载)。
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new adFileToByteArray(file),
headers, HttpStatus.CREATED);
}
}
4.实现上传文件的功能还需要在springmvc中配置bean:
class="org.springframework.web.multipartmons.CommonsMultipartResolver">
10485760
UTF-8
完整代码如下:
up.jsp
File控件上传者:
选择文件:
选择文件:
doupload.jsp
上传处理页面request.setCharacterEncoding("utf-8");
String uploadFileName = ""; //上传的文件名
String fieldName = ""; //表单字段元素的name属性值
//请求信息中的内容是否是multipart类型
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
//上传文件的存储路径(服务器文件系统上的绝对文件路径)
String uploadFilePath = Session().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) ();
if (item.isFormField()){ //普通表单字段
fieldName = FieldName(); //表单字段的name属性值
if (fieldName.equals("user")){
//输出表单字段的值
out.String("UTF-8")+"上传了文件。
");
}
}else{ //文件表单字段
String fileName = Name();
if (fileName != null && !fileName.equals("")) {
File fullFile = new Name());
File saveFile = new File(uploadFilePath, Name());
item.write(saveFile);
uploadFileName = Name();
out.print("上传成功后的文件名是:"+uploadFileName);
out.print("tt下载链接:"+""+uploadFileName+"");
out.print("
");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
%>
FileUploadController.java
troller;
import java.io.File;
import java.URLDecoder;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apachemons.fileupload.FileItem;
import org.apachemons.fileupload.FileItemFactory;
import org.apachemons.fileupload.disk.DiskFileItemFactory;
import org.apachemons.fileupload.servlet.ServletFileUpload;
import org.apachemons.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 Bytes("iso-8859-1"),"UTF-8");
//下载文件路径
String path = ServletContext().getRealPath("/upload/");
File file = new File(path + File.separator + filename);
HttpHeaders headers = new HttpHeaders();
//下载显示的文件名,解决中文名称乱码问题
String downloadFielName = new Bytes("iso-8859-1"),"UTF-8");
//通知浏览器以attachment(下载方式)打开图片
headers.setContentDispositionFormData("Content-Disposition", downloadFielName);
//application/octet-stream : 二进制流数据(最常见的文件下载)。
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new adFileToByteArray(file),
headers, HttpStatus.CREATED);
}
}
xmlns:xsi=""
xmlns:mvc=""
xmlns:context=""
xmlns:aop=""
xmlns:tx=""
xsi:schemaLocation="
.2.xsd
.2.xsd
.xsd
.2.xsd
.xsd">
class="org.springframework.web.multipartmons.CommonsMultipartResolver">
10485760
UTF-8
Student
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
l
1
springmvc
*.action
contextConfigLocation
classpath:spring/applicationContext-*.xml
org.t.ContextLoaderListener
以上便为文件上传和下载的全部代码,博主亲测过,没有问题。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
本文发布于:2024-01-30 23:22:48,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170662817123577.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |