这是自己之前做文件上传的例子,写给自己看的:
upload:
public void doService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
try {
String fileValidateClass = request.getParameter("fileValidateClass");
String fileUploadPath = request.getParameter("fileUploadPath");
if (fileUploadPath == null || fileUploadPath.equals("")) {
ConfigurationService c = (ConfigurationService) Context.getBean("configurationService");
String uploadPath = c.getConfigtationValue("configuration.file.upload.path");
fileUploadPath = FileUtils.getRealPath(request, "/" + uploadPath);
}
File fileParent = new File(fileUploadPath);
if (!fileParent.exists()) {
fileParent.mkdirs();
}
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setSizeThreshold(DEFAULT_SIZE_THRESHOLD);
dfif.setRepository(new File(fileUploadPath));
ServletFileUpload sfu = new ServletFileUpload(dfif);
sfu.setSizeMax(DEFAULT_SIZE_MAX);
List<FileItem> fileItems = sfu.parseRequest(request);
if (fileValidateClass != null && !fileValidateClass.equals("")) {
UploadValidation fileValidate = null;
try {
fileValidate = (UploadValidation) Class.forName(
fileValidateClass).newInstance();
} catch (ClassNotFoundException e) {
throw new ClassNotFoundException("Can't find Class:" + fileValidateClass);
}
String validateinfo = fileValidate.validateFilename(fileItems, fileUploadPath);
if (validateinfo == null || validateinfo.equals("")) {
throw new Exception(validateinfo);
}
}
String realFile = null;
String shortName = null;
String fileNameInSession = "";
for (FileItem fileItem : fileItems) {
shortName = fileItem.getName().substring(
fileItem.getName().lastIndexOf("\\") + 1,
fileItem.getName().length());
fileNameInSession = request.getSession().getId() + System.currentTimeMillis();
realFile = fileUploadPath + System.getProperty("file.separator") + fileNameInSession + "_" + shortName;
fileItem.write(new java.io.File(realFile));
request.getSession().setAttribute("fileNameInSession", fileNameInSession);
}
out.print("{success:true,realFile:'"+fileNameInSession+"'}");
} catch (Exception e) {
logger.error(e);
out.print("{error:'"+e.getMessage()+"'}");
}
out.close();
}
download:
public void doService(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
OutputStream o = response.getOutputStream();
String fileName = request.getParameter("fileName");
String romotefileInfo = request.getParameter("romotefileInfo");
if (fileName != null) {
try {
String uploadPath = request.getParameter("uploadPath");
String downloadPath = "";
if (uploadPath == null || uploadPath.trim().equals("")) {
ConfigurationService c = (ConfigurationService) Context.getBean("configurationService");
uploadPath = c.getConfigtationValue("configuration.file.upload.path");
downloadPath = FileUtils.getRealPath(request, "/" + uploadPath);
} else {
downloadPath = uploadPath;
}
//download file from hard driver
String pathname = downloadPath + fileName;
File fileLoad = new File(pathname);
int index = fileName.indexOf("_");
String name = fileName.substring(index + 1);
response.setHeader("Content-disposition", "attachment;filename=" + "" + name + "");
response.setContentType("text/plain");
long fileLength = fileLoad.length();
String length = String.valueOf(fileLength);
response.setHeader("Content_Length", length);
// download the file.
FileInputStream in = new FileInputStream(fileLoad);
int n = 0;
byte b[] = new byte[1024];
while ((n = in.read(b)) != -1) {
o.write(b, 0, n);
}
} catch (Exception e) {
logger.error(e);
o.write(new String("errro to download file").getBytes());
}
o.close();
} else if (romotefileInfo != null) {
try {
//download file from database
String filedownRemoteClass = request
.getParameter("filedownClass");
DownLoadFromRemote downLoadFromRemote = (DownLoadFromRemote) Class
.forName(filedownRemoteClass).newInstance();
byte[] filecontents = downLoadFromRemote
.getFileFromRemote(romotefileInfo);
String[] filelist = romotefileInfo.split(";");
String remotefileName = filelist[2];
//get the short name
int index = remotefileName.indexOf("_");
String name = remotefileName.substring(index + 1);
BufferedOutputStream stream = null;
File file = new File(name);
FileOutputStream fstream = new FileOutputStream(file);
stream = new BufferedOutputStream(fstream);
stream.write(filecontents);
stream.flush();
response.setHeader("Content-disposition", "attachment;filename=" + "" + name + "");
response.setContentType("text/plain");
// get the file length.
long fileLength = file.length();
String length = String.valueOf(fileLength);
response.setHeader("Content_Length", length);
// download the file.
FileInputStream in = new FileInputStream(file);
byte b[] = new byte[1024];
int n = 0;
while ((n = in.read(b)) != -1) {
o.write(b, 0, n);
}
} catch (ClassNotFoundException e) {
logger.error(e);
o.write(new String("errro to download file: " + e.getMessage()).getBytes());
} catch (InstantiationException e) {
logger.error(e);
o.write(new String("errro to download file: " + e.getMessage()).getBytes());
} catch (IllegalAccessException e) {
logger.error(e);
o.write(new String("errro to download file: " + e.getMessage()).getBytes());
} catch (Exception e) {
logger.error(e);
o.write(new String("errro to download file: " + e.getMessage()).getBytes());
}
o.close();
}
}
分享到:
相关推荐
对于文件下载,你可以创建一个Servlet,读取服务器上的文件,然后设置响应头信息(如 Content-Disposition 和 Content-Type),并将文件内容写入到响应的输出流中,从而实现文件下载功能。 总的来说,Apache ...
文件上传通常涉及到客户端(用户)和服务器端两个方面。 ##### 1. 前端页面设计 在前端页面设计时,需要注意的是表单提交方式必须设置为`POST`,同时需要指定`enctype`属性为`multipart/form-data`,这样才能正确...
com.fm.FileManagerService:一个servlet用来实现主要的文件上传下载逻辑的 com.fm.MyPreogressListener:一个进度监听类,用来做上传进度条的 jquery-1.9.1.js index.jsp:文件列表页面 upload.jsp:文件上传form...
本知识点主要探讨如何使用JSP和Servlet来实现文件的上传与下载功能,这是Web应用中常见的需求。 首先,我们要理解JSP和Servlet的角色。JSP主要用于展示视图,而Servlet则处理业务逻辑和控制流程。在上传下载场景中...
这两个包提供了处理HTTP请求、解析多部分数据(包括文件上传)以及存储上传文件所需的功能。 1. **`javax.servlet` 包**: 这个包是Java Servlet API的一部分,它包含了处理HTTP请求和响应的核心类。在文件上传...
上传文件" name="submit"> ``` 然后在Servlet中,我们需要解析这个多部分请求。可以使用Apache的Commons FileUpload库来处理。首先,添加依赖到项目,然后在Servlet中编写如下代码: ```java import org....
1. **设置最大上传大小**:在`web.xml`配置文件中,我们需要设置`multipart-config`元素来指定最大上传文件大小,例如: ```xml <servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>...
这里我们将深入探讨如何利用Servlet来实现这两个功能。 首先,让我们了解Servlet的工作原理。Servlet是Java类,它扩展了Java Servlet API,通过HttpServlet类来处理HTTP请求。当用户通过浏览器发起请求时,Web...
5. **安全性**:验证上传文件的类型和大小,防止恶意文件的上传,例如病毒或大文件占用过多服务器资源。 综上所述,这个项目利用JSP创建用户友好的界面,通过Servlet处理文件上传的逻辑,实现了一个完整的文件上传...
Commons FileUpload库提供了对上传文件的解析、临时存储和错误处理等功能,使得开发者能够更方便地在Servlet中实现文件上传逻辑。 #### 引入依赖库 为了使用Apache Commons FileUpload,需要在项目中引入两个JAR包...
在这个"Servlet+jsp文件上传和下载"的场景中,我们将探讨如何使用这两种技术实现文件的上传与下载功能。 首先,文件上传涉及到HTTP协议中的多部分/形式数据(Multipart/form-data)格式。当用户通过HTML表单提交...
总之,这两个库的结合使用极大地简化了Servlet中文件上传和下载的复杂性,让开发者可以更专注于业务逻辑,而不是底层的I/O操作。在实际开发中,务必注意安全性和性能优化,例如限制文件大小、防止路径遍历攻击等。...
此外,"PicUpload_Java"和"PicUpload_Flex"可能是项目中的两个关键源代码文件或目录。"PicUpload_Java"可能包含Java Servlet的实现,而"PicUpload_Flex"则可能包含了Flex前端的MXML和ActionScript代码。 总的来说,...
在这个主题中,“jsp+servlet实现文件上传和下载”是核心知识点,我们将深入探讨如何利用这两个组件以及Apache的`commons-fileupload`和`commons-io`库来完成这一任务。 1. **文件上传** 文件上传通常涉及用户通过...
在这个场景下,"JSP+Servlet实现mp3的上传下载"是一个典型的文件操作功能,涉及到用户界面展示、后端处理逻辑以及文件I/O操作。以下将详细解释这个主题中的关键知识点。 首先,JSP是一种服务器端脚本语言,它允许...
2. **文件上传过程**:文件上传通常分为两个步骤:解析请求和存储文件。解析请求时,我们需要读取请求体中的每个部分,并将文件保存到服务器的临时目录或指定位置。 3. **进度监听**:在使用FileUpload库时,可以...
接下来,我们将深入探讨这两个技术如何协同工作,实现文件上传功能。 首先,Vue.js在前端部分扮演了用户界面和数据绑定的角色。Vue组件可以创建一个上传表单,包含一个`<input type="file">`元素,让用户选择要上传...
纯jsp,servlet版的文件上传与下载.同时可以上传两个文件,也可以自己修改下代码上传多个文件,这是本人的自己的代码,不是为了赚点积分,还真有点舍不得上传。工程名写成了了nostruts,是为了区分struts,用jsp写的
这两个技术都是Java Servlet的重要扩展,用于增强Web应用程序的功能和用户体验。 首先,让我们深入理解Struts2框架。Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它简化了创建企业...
`JSP(JavaServer Pages)`和`Servlet`是Java EE平台上的两种核心技术,它们常用于构建动态Web项目,包括文件上传功能。本篇文章将深入讲解如何使用JSP和Servlet实现文件上传。 首先,我们需要了解`JSP`的基本概念...