`
wsql
  • 浏览: 12302061 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Servlet中的上传下载文件

 
阅读更多

一、文件上传

文件的上传也是基于表单来完成的,表单中的file元素可以自动生成一个文本框和一个按钮,文本框可以输入本地文件名或路径,点击按钮则可以打开一个文件选择框让用户选中本地文件。需要注意的是在文件上传时还必须设置表单的enctype属性,并将它的值设置为multipart/form-data。


upload.jsp
<FORM METHOD="POST" ENCTYPE="multipart/form-data"
ACTION="SmartUpladServlet.do">
<INPUT TYPE="text" name="userName"><br>
<INPUT TYPE="file" NAME="myFile"><br>
<INPUT TYPE="file" NAME="myFile2"><br>
<INPUT TYPE="file" NAME="myFile3"><br>
<INPUT TYPE="SUBMIT" value="上传">
</FORM>
</body>

这里使用的是SmartUpload,需要该包。

上传文件的Servlet

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;

public class SmartUpladServlet extends HttpServlet {

public SmartUpladServlet() {
super();
}

public void destroy() {
super.destroy();
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//文件上传个数
int count = 0;
//文件上传地址
String filePath = getServletContext().getRealPath("/")+"smartUpload";
//如果文件夹不存在 则创建这个文件夹
File file = new File(filePath);
if(!file.exists())
{
file.mkdir();

}

//初始化对象
SmartUpload su = new SmartUpload();
su.initialize(getServletConfig(),request,response);

//设置文件最大容量
su.setMaxFileSize(10*1024*1024);
//设置所有文件最大容量
su.setTotalMaxFileSize(100*1024*1024);
//设置上传文件类型
su.setAllowedFilesList("rar,txt,jpg,bmp,gif");

try {
//设置禁止上传的文件类型
su.setDeniedFilesList("jsp,js,html,css");
//上传文件
su.upload();
System.out.println("userName=" + su.getRequest().getParameter("userName"));
count = su.save(filePath);
}
catch (SQLException e) {
e.printStackTrace();
}
catch (SmartUploadException e) {
e.printStackTrace();
}
for (int i = 0; i < su.getFiles().getCount(); i++) {
com.jspsmart.upload.File tempFile = su.getFiles().getFile(i);
System.out.println("表单项名称:" + tempFile.getFieldName());
System.out.println("文件名:" + tempFile.getFileName());
System.out.println("文件长度:" + tempFile.getSize());
System.out.println("文件扩展名:" + tempFile.getFileExt());
System.out.println("文件全名:" + tempFile.getFilePathName());
}
System.out.println("上传成功!共" + count + "个文件!");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);

}

public void init() throws ServletException {
}
}


web.XML文件配置

<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>SmartUpladServlet</servlet-name>
<servlet-class>com.kay.servlet.SmartUpladServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>SmartUpladServlet</servlet-name>
<url-pattern>/SmartUpladServlet.do</url-pattern>
</servlet-mapping>


二、文件下载


通过超链接下载文件,会暴露了下载文件在服务器中的真实地址,不利于对资源进行安全保护,而且利用超链接下载文件,服务器端得文件只能存放在Web应用程序所在的目录下。利用程序编码实现下载,可以增加安全机制,比如我们只能让VIP会员下载等等。还可以从任意位置进行下载,我们可以将文件放到Web应用程序外的目录中。

显示文件夹内所有文件的servlet

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ShowFileServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = "c:/file";
//声明集合存放目录下所有文件的文件名
List<String> fileList = new ArrayList<String>();
File folder = new File(path);
//判断文件夹是否存在并且是否是一个目录
if(folder.exists() && folder.isDirectory()){
//获得目录中所有文件及目录
File[] files = folder.listFiles();
for (File file : files) {
//如果是文件
if(file.isFile()){
//将文件名放入集合中
fileList.add(file.getName());
}
}
}
request.setAttribute("fileList", fileList);
request.getRequestDispatcher("showfile.jsp").forward(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}

}


showfile.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>显示所有文件</title>
</head>
<body>
请选择您要下载的文件:<br/>
<c:forEach items="${fileList}" var="fileName">
<a href="downLoadServlet?filename=${fileName }">${fileName }</a><br/>
</c:forEach>
</body>

</html>


下载文件的DownLoadServlet
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownLoadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = "C:/file";
String fileName = request.getParameter("filename");
File file = new File(path + "/" + fileName);
//如果文件存在
if (file.exists()) {
//设置响应类型及响应头
response.setContentType("application/x-msdownload");
response.addHeader("Content-Disposition", "attachment; filename=\""
+ fileName + "\"");
//读取文件
InputStream inputStream = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(inputStream);
byte[] bytes = new byte[1024];
ServletOutputStream outStream = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(outStream);
int readLength = 0;
while ((readLength = bis.read(bytes)) != -1) {
bos.write(bytes, 0, readLength);
}
//释放资源
inputStream.close();
bis.close();
bos.flush();
outStream.close();
bos.close();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

原帖地址:http://blog.sina.com.cn/s/blog_60f823dd01017nz9.html


分享到:
评论

相关推荐

    servlet 文件上传下载例子

    在这个"Servlet 文件上传下载例子"中,我们将探讨如何使用Servlet实现文件的上传和下载功能,这对于构建一个简单的图片文件服务器至关重要。 1. **文件上传** - **MultipartRequest**: 在Servlet中,处理文件上传...

    jsp,servlet上传下载文件

    在文件上传下载中,servlet 负责处理上传的文件,并将其存储到指定的位置。在本例中,servlet 使用 Spring 框架的 MultipartFile 对象来处理上传的文件。 文件上传的实现 文件上传的实现可以分为三个步骤: 1. ...

    JSP/servlet实现上传下载

    本知识点主要探讨如何使用JSP和Servlet来实现文件的上传与下载功能,这是Web应用中常见的需求。 首先,我们要理解JSP和Servlet的角色。JSP主要用于展示视图,而Servlet则处理业务逻辑和控制流程。在上传下载场景中...

    servlet上传下载文件

    总结来说,"servlet上传下载文件"是一个使用Java Servlet实现的Web应用程序,允许用户上传文件至服务器,并能够从服务器下载这些文件。这个系统的核心在于Servlet的`doPost`或`doGet`方法,它们处理HTTP请求,读取或...

    servlet实现上传下载 java源码

    在这个场景中,我们关注的是如何使用Servlet来实现文件的上传和下载功能,同时结合Tomcat服务器和XML文件进行数据存储。以下是关于这些知识点的详细说明: 1. **Servlet**: Servlet是Java EE规范的一部分,它是一...

    文件上传与下载servlet

    在IT行业中,文件上传与下载是Web应用中常见的功能,特别是在企业级系统中,例如文档管理系统、在线教育平台等。Servlet作为Java Web开发中的一个重要组件,常被用来处理这些操作。下面将详细介绍如何使用Servlet...

    Servlet文件上传、下载及缩略图的生成

    在这个项目中,我们重点关注的是Servlet如何实现文件上传、下载和缩略图的生成。 首先,让我们深入理解文件上传的过程。在Web应用中,文件上传通常通过HTML表单实现,使用`&lt;input type="file" /&gt;`标签让用户选择要...

    Servlet中文件上传和下载

    本文将深入探讨如何在Servlet中实现文件的上传和下载功能,以及在页面上利用JSP和Javabean来实例化对象。 首先,文件上传是通过HTTP多部分请求(Multipart Request)来实现的。Servlet 3.0及以上版本提供了对这种...

    JSP+Servlet文件上传下载实例

    上传文件" name="submit"&gt; ``` 然后在Servlet中,我们需要解析这个多部分请求。可以使用Apache的Commons FileUpload库来处理。首先,添加依赖到项目,然后在Servlet中编写如下代码: ```java import org....

    servlet实现文件上传下载

    本教程将详细讲解如何使用Servlet实现文件的上传和下载功能,其中涉及到的主要技术点包括Servlet API、Multipart解析以及文件流操作。 首先,我们需要了解Servlet在文件上传中的作用。Servlet在接收到客户端(通常...

    Servlet实现文件上传与下载

    ### Servlet实现文件上传与下载 #### 一、概述 在Web开发中,文件的上传与下载是一项非常常见的功能需求。本文将详细介绍如何使用Java Servlet技术实现文件的上传和下载功能。我们将通过一个简单的示例来展示整个...

    SmartUploadservlet文件上传下载

    - 获取上传文件信息:通过`smartUpload.getFiles()`方法获取上传文件的详细信息,如文件名、类型、大小等。 - 保存文件:根据需要,可以选择性地将上传的文件移动或复制到服务器的指定位置。 4. **文件下载流程**...

    用servlet写的文件上传及下载功能带进度条

    自己用servlet写的文件上传及下载功能带进度条 主要用到两个jar:commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar 内容介绍: com.fm.FileManagerService:一个servlet用来实现主要的文件上传下载逻辑的 ...

    文件上传下载servlet自用

    1. 文件大小限制:为了防止大文件导致服务器内存溢出,我们需要设定上传文件的最大大小。 2. 文件类型检查:验证用户上传的文件类型,避免安全风险,如上传恶意脚本。 3. 文件重命名:为避免文件名冲突,通常会对...

    Servlet文件上传和下载

    JavaServlet文件上传和下载,java初学者笔记!

    jsp+servlet实现文件上传下载

    ### jsp+servlet实现文件上传下载 在现代Web开发中,文件上传下载是常见的功能之一。JSP(JavaServer Pages)与Servlet技术结合可以轻松实现这一功能。本篇将详细介绍如何利用jspSmartUpload组件实现文件的上传与...

    java servlet实现上传/下载文件

    servlet实现上传文件和下载文件的方法,在浏览器中输入http://ip:port/servletName?path这种方式将客户端文件上传至服务器端,简单的例子,servletName参照web.xml path参照servlet中写的参数

    使用Servlet实现文件的上传与下载

    3. **文件存储**:`FileItem`对象包含上传文件的信息,如文件名、内容等。我们需要将其内容保存到服务器的某个位置,可以选择临时目录或指定的存储路径。 **文件下载:** 1. **HTTP响应准备**:在Servlet中,我们...

    【Demo Project】ajaxSubmit+Servlet表单文件上传和下载

    1. **文件名安全**:处理上传文件时,应确保文件名的安全,避免路径遍历攻击。可以使用哈希或时间戳等方式重命名文件。 2. **大小限制**:限制上传文件的大小,防止DoS攻击。 3. **文件类型检查**:验证上传文件的...

    Java servlet 和 swf上传超大文件源码

    1. **设置最大上传大小**:在`web.xml`配置文件中,我们需要设置`multipart-config`元素来指定最大上传文件大小,例如: ```xml &lt;servlet&gt; &lt;servlet-name&gt;UploadServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;...

Global site tag (gtag.js) - Google Analytics