<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="common/js/jquery.js" type="text/javascript"></script>
<script src="common/js/ajaxfileupload.js" type="text/javascript"></script>
<script>
/** 利用ajax方式上传文件 **/
function uploadFile(){
$.ajaxFileUpload({
url : 'TestServlet?action=upload',
secureuri : false,
fileElementId : 'fileC',
dataType: 'text',
success : function(data,status){
if(data.indexOf("上传文件失败!")==-1){
var oldFileName = data.split("|")[0];
var newFileName = data.split("|")[1];
var fileListValue = $("#uploadFileList").html();
var obj = $("#uploadFileList");
var content = fileListValue+"<span id='fileList"+newFileName+"'><br/><a href=\"javascript:downLoadFile('"+data+"')\">"+oldFileName+"</a>  <img src='common/images/X.gif' onClick=\"deleteFile('"+newFileName+"')\" /></span>";
obj.html(content);
}
},
error: function (data, status, e) //相当于java中catch语句块的用法
{
alert("上传文件失败!");
}
});
}
/** 删除上传的文件 **/
function deleteFile(fileName){
$.ajax({
type : "post",
url : "TestServlet?action=deleteFile",
data : "fileName="+fileName,
success:function(msg){
alert(msg);
if(msg == "删除成功!"){
var t = "fileList"+fileName;
var ttt = document.getElementById(t);
ttt.innerHTML = "";
}
}
})
}
/** 下载文件 **/
function downLoadFile(fileName){
window.location.href = "TestServlet?action=downLoadFile&fileName="+encodeURIComponent(encodeURIComponent(fileName));
}
</script>
</head>
<body>
<form name="frm" id="frm" method="POST" enctype="multipart/form-data">
<input type="file" name="fileC" id="fileC" style="width:400px;height:25px"/>
<input type="button" name="upload" id="upload" value="上传文件" onClick="uploadFile()"/>
<br/><span id="uploadFileList"></span>
</form>
</body>
</html>
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class TestServlet extends HttpServlet {
public TestServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");// 设置编码方式,保证返回到前台中文不乱码
request.setCharacterEncoding("UTF-8");// 设置编码方式,保证从前台到后台中文不乱码
response.setCharacterEncoding("UTF-8");
String action = request.getParameter("action");
if (action.equals("upload")) {
upload(request, response);
} else if (action.equals("deleteFile")) {
deleteFile(request, response);
} else if(action.equals("downLoadFile")){
downLoadFile(request, response);
}
}
public void init() throws ServletException {
// Put your code here
}
/**
* 上传文件
*
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void upload(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String result = "";
try {
result = UpFile(request);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
result = "上传文件失败!";
}
System.out.println(result);
response.getWriter().print(result);
}
/**
* 删除上传的文件
*
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void deleteFile(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String result = "";
String fileName = request.getParameter("fileName");
try {
boolean b = false;
b = deleteFileDao(fileName);
if (b) {
result = "删除成功!";
} else {
result = "删除失败!";
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
result = "删除文件失败!";
}
response.getWriter().print(result);
}
/**
* 下载文件
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void downLoadFile(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String fileName = java.net.URLDecoder.decode(request.getParameter("fileName"),"UTF-8");//后台转编码一次成中文
String[] fileNameAll = fileName.split("\\|");
String oldFileName = fileNameAll[0];
String newFileName = fileNameAll[1];
String filePath = this.getServletConfig().getServletContext().getRealPath("/");
File file = new File(filePath + "uploaded\\" + newFileName);
response.setContentType("application/x-msdownload");
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition", "attachment;filename=" + new String(oldFileName.getBytes("GBK"), "ISO8859_1"));//保证另存为文件名为中文
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] b = new byte[1024];
long k = 0;
OutputStream out = response.getOutputStream();
while (k < file.length()) {
int j = bis.read(b, 0, 1024);
k += j;
out.write(b, 0, j);
}
out.close();
bis.close();
fis.close();
}
/**
* 上传文件
*
* @param req
* @return
* @throws Exception
*/
public String UpFile(HttpServletRequest req) throws Exception {// 上传文件
// req.setCharacterEncoding("UTF-8");//设置编码方式,让上传的文件(中文)不会出现乱码
String fileName = "";
String filePath = this.getServletConfig().getServletContext()
.getRealPath("/");
File saveDir = new File(filePath + "uploaded");
if (!saveDir.isDirectory()) {
saveDir.mkdir();
}
DiskFileItemFactory dff = new DiskFileItemFactory();// 创建该对象
dff.setRepository(saveDir);// 指定上传文件的临时目录
dff.setSizeThreshold(1024000);// 指定在内存中缓存数据大小,单位为byte
ServletFileUpload sfu = new ServletFileUpload(dff);// 创建该对象
sfu.setSizeMax(50000000);// 指定单个上传文件的最大尺寸
List items = sfu.parseRequest(req);// 解析request //
// 请求,并返回FileItemIterator集合
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem fis = (FileItem) iter.next();// 从集合中获得一个文件流
if (!fis.isFormField()) {// 过滤掉表单中非文件域
fileName = fis.getName().substring(
fis.getName().lastIndexOf("\\") + 1);// 获得上传文件的文件名
String hzm = fileName.substring(fileName.indexOf('.'));// 获取文件的后缀名
String nameString = getNewFileName() + hzm;// 新生成的文件名称
fis.write(new File(saveDir + "\\" + nameString));
fileName = fileName + "|" + nameString;
}
}
return fileName;
}
/**
* 删除文件
*
* @param fileName
* @return
*/
public boolean deleteFileDao(String fileName) {
boolean b = false;
String filePath = this.getServletConfig().getServletContext()
.getRealPath("/");
File file = new File(filePath + "uploaded\\" + fileName);
if (file.exists()) {
file.delete();
b = true;
}
return b;
}
/**
* 生成新文件名称(年月日时分秒+二位随机码)
*
* @return
*/
public String getNewFileName() {
String newFileName = "";
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyyMMddHHmmss");
newFileName = simpleDateFormat.format(date);
String random = getRandom(2);
return newFileName + random;
}
/**
* 获取n位随机数
*
* @param n
* @return
*/
public String getRandom(int n) {
String randomString = "";
if (n == 1) {
randomString = (int) (Math.random() * 10) + "";
} else {
randomString = getRandom(n - 1) + (int) (Math.random() * 10);
}
return randomString;
}
}
分享到:
相关推荐
在这个"Servlet 文件上传下载例子"中,我们将探讨如何使用Servlet实现文件的上传和下载功能,这对于构建一个简单的图片文件服务器至关重要。 1. **文件上传** - **MultipartRequest**: 在Servlet中,处理文件上传...
jsp、servlet 文件上传下载技术详解 文件上传下载是 Web 应用中的一种常见需求,使用 jsp 页面和 servlet 实现文件上传下载是其中的一种解决方案。下面将详细介绍 jsp、servlet 文件上传下载技术。 文件上传下载...
在Java Web开发中,JSP(Java...总的来说,JSP+Servlet实现文件上传下载涉及到HTML表单、Servlet请求处理、文件I/O以及第三方库的使用。通过这个实例,开发者可以掌握在Java Web环境中处理文件上传下载的基本流程。
下面将详细解释如何使用Servlet实现文件上传和下载的功能。 ### 文件上传 文件上传主要涉及以下步骤: 1. **创建HTML表单**:首先,我们需要一个HTML表单让用户选择要上传的文件。表单应包含`enctype="multipart/...
在Java Web开发中,文件上传和下载功能是常见的需求,特别是在构建B/S系统时。`SmartUpload`组件是一个专门用于处理此类任务的工具,它极大地简化了开发者的工作,使得在JSP环境中实现文件上传和下载变得轻而易举。...
### Servlet实现文件上传与下载 #### 一、概述 在Web开发中,文件的上传与下载是一项非常常见的功能需求。本文将详细介绍如何使用Java Servlet技术实现文件的上传和下载功能。我们将通过一个简单的示例来展示整个...
总结来说,实现Servlet文件上传下载需要理解Servlet生命周期、HTTP请求处理、多部分数据解析以及文件I/O操作。Apache Commons FileUpload库简化了这一过程,但理解其背后的原理对于解决可能出现的问题和优化性能至关...
以上就是使用JSP和Servlet实现文件上传下载的基本流程和关键代码。在实际应用中,我们还需要考虑错误处理、安全性(如防止文件覆盖、上传恶意文件等)以及性能优化(如使用缓冲、断点续传等)。在大型项目中,可能还...
在文件上传和下载的场景中,Servlet将扮演接收请求、处理数据并发送响应的角色。 **文件上传:** 1. **表单设计**:在HTML页面上,我们需要一个表单让用户选择要上传的文件。表单需要设置`enctype="multipart/form-...
Servlet是Java提供的一种用于扩展服务器功能的接口,尤其在网络应用中,如文件上传和下载。本实例将深入讲解如何利用Http Servlet实现文件的上传与下载功能。 一、文件上传 1. **MultipartRequest**: 在Servlet中...
在这个项目中,我们重点关注的是Servlet如何实现文件上传、下载和缩略图的生成。 首先,让我们深入理解文件上传的过程。在Web应用中,文件上传通常通过HTML表单实现,使用`<input type="file" />`标签让用户选择要...
自己用servlet写的文件上传及下载功能带进度条 主要用到两个jar:commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar 内容介绍: com.fm.FileManagerService:一个servlet用来实现主要的文件上传下载逻辑的 ...
包含文件 1:ajax上传删除,支持多文件实时预览; 2:jstl标签定制, ...上传使用servlet,使用跟FCK使用一样,感谢FCK,让我借鉴。支持标签定义上传类型。 当然是跨平台,支持所有浏览器 使用超级方便。
下面将详细介绍如何使用Servlet实现文件上传和下载的功能。 ### 文件上传 文件上传通常涉及到HTTP协议中的`multipart/form-data`编码类型,这是处理表单数据中包含文件的关键。Servlet 3.0及以上版本提供了更方便...
总结起来,Servlet中的文件上传和下载涉及到HTTP多部分请求、文件流操作、响应头设置等多个方面。通过JSP和Javabean,我们可以更方便地在页面上与用户交互,同时封装和管理业务逻辑。理解并熟练掌握这些技术,对于...
JavaServlet文件上传和下载,java初学者笔记!
### jsp+servlet实现文件上传下载 在现代Web开发中,文件上传下载是常见的功能之一。JSP(JavaServer Pages)与Servlet技术结合可以轻松实现这一功能。本篇将详细介绍如何利用jspSmartUpload组件实现文件的上传与...
Java Servlet和SWFUpload是两种不同的技术,但它们在处理大文件上传方面有着共同的应用。在Web开发中,用户可能需要上传大文件,如视频、音频或大型文档,这就需要服务器端具有处理大文件上传的能力。Java Servlet是...
在IT行业中,文件上传下载是Web应用中常见的功能,尤其在服务器端编程中,Servlet扮演着重要的角色。Servlet是Java编程语言中用于扩展服务器功能的接口,它可以在接收到HTTP请求后进行处理,并向客户端返回响应。在...
【AjaxSubmit+Servlet实现表单文件上传与下载详解】 在Web开发中,文件上传和下载是常见的功能,尤其是在用户交互丰富的应用中。本项目【Demo Project】利用AjaxSubmit结合Servlet技术,提供了一种高效、异步的方式...