昨天搞了一下午的文件上传下载,文件上传实现了,用的是apache fileupload,而文件下载一直没有搞好,看了看公司的项目,发现文件下载是靠浏览器自动实现的,你只要将你的文件路径写好,[url=/testUpload/upload/20080331105430.doc]文件下载[/url],用户只要点击这个超链接就可以保存文件了,testUpload是我的项目名称,这是从服务器上下载文件,以后再用到下载以后再学习吧
现在说下文件上传功能:
index.jsp页面:
<html>
<head>
<script type="text/javascript">
function doSubmit(){
document.form_save.submit();
}
</script>
</head>
<body>
<form action="file_upload.jsp" method=post id='form_save' name='form_save' enctype="multipart/form-data" οnsubmit="return CheckUploadForm()">
<table class='tablist' style="width: 550px; margin: auto" cellspacing=0 cellpadding=0>
<tr><th align="right" style="width: 180px;">选择文件</th>
<td><input type=file class="input_center" name=uploadfile size=1 id="select_file" style="width:350px" ></td></tr>
<tr><td colspan="2" align="center">
<input type=button name="" id="upload_file" οnclick="doSubmit()" value="上传文件"></td></tr>
</table>
</form></body>
***********************************************
当然form的提交可在是servlet或者是.do都可以,为了方便我就在jsp中处理了,只是测试而已
file_upload.jsp页面:
<%@page contentType="text/html;charset=UTF-8"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.io.FilenameUtils,org.apache.commons.io.FileUtils"%>
<script src="<%=request.getContextPath()%>/js/common.js"></script>
<%
DiskFileItemFactory factory = new DiskFileItemFactory();
//这里定义文件保存地址,我就直接保存到根目录下了
String path=request.getRealPath("/upload");
//这里是设置临时文件的存储目录,我也设置到根目录下了
factory.setRepository(new File(path));
//下面这个方法意思是说如果大于1024*1024才存储到临时目录下,如果小于就直接读取到内存中
factory.setSizeThreshold(1024 * 1024);
//ServletFileUpload是主要的操作
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
try{
//将表单读取过来,存到List里面
List<FileItem> list = upload.parseRequest(request);
//便利这个list
for(FileItem item:list){
//isFormField如果为真表示该字段是非文件字段
if(item.isFormField()){
//获取字段name属性里的内容
String name = item.getFieldName();
//获取该字段的value
String value = item.getString("utf-8");
System.out.println("FieldValue=="+value);
//保存到request
request.setAttribute(name, value);
}else{//如果该字段是file
//获取字段的name属性
String name = item.getFieldName();
//获取字段value属性
String value = item.getName();
//由于浏览器的不同,所以只讲文件名分割过来
int start = value.lastIndexOf("\\");
String fileName = value.substring(start+1);
request.setAttribute(name, fileName);
System.out.println("fieldName is:"+name+" fieldValue is:"+fileName);
//保存
item.write(new File(path,fileName));//可以直接输入,也可以通过流操作。
}
}
}catch(Exception e){
e.printStackTrace();
}
%>
<script type="text/javascript">
System.out.println("aaa");
window.opener.refreshAttach();
closeWindow();
</script>
现在说下文件上传功能:
index.jsp页面:
<html>
<head>
<script type="text/javascript">
function doSubmit(){
document.form_save.submit();
}
</script>
</head>
<body>
<form action="file_upload.jsp" method=post id='form_save' name='form_save' enctype="multipart/form-data" οnsubmit="return CheckUploadForm()">
<table class='tablist' style="width: 550px; margin: auto" cellspacing=0 cellpadding=0>
<tr><th align="right" style="width: 180px;">选择文件</th>
<td><input type=file class="input_center" name=uploadfile size=1 id="select_file" style="width:350px" ></td></tr>
<tr><td colspan="2" align="center">
<input type=button name="" id="upload_file" οnclick="doSubmit()" value="上传文件"></td></tr>
</table>
</form></body>
***********************************************
当然form的提交可在是servlet或者是.do都可以,为了方便我就在jsp中处理了,只是测试而已
file_upload.jsp页面:
<%@page contentType="text/html;charset=UTF-8"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.io.FilenameUtils,org.apache.commons.io.FileUtils"%>
<script src="<%=request.getContextPath()%>/js/common.js"></script>
<%
DiskFileItemFactory factory = new DiskFileItemFactory();
//这里定义文件保存地址,我就直接保存到根目录下了
String path=request.getRealPath("/upload");
//这里是设置临时文件的存储目录,我也设置到根目录下了
factory.setRepository(new File(path));
//下面这个方法意思是说如果大于1024*1024才存储到临时目录下,如果小于就直接读取到内存中
factory.setSizeThreshold(1024 * 1024);
//ServletFileUpload是主要的操作
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
try{
//将表单读取过来,存到List里面
List<FileItem> list = upload.parseRequest(request);
//便利这个list
for(FileItem item:list){
//isFormField如果为真表示该字段是非文件字段
if(item.isFormField()){
//获取字段name属性里的内容
String name = item.getFieldName();
//获取该字段的value
String value = item.getString("utf-8");
System.out.println("FieldValue=="+value);
//保存到request
request.setAttribute(name, value);
}else{//如果该字段是file
//获取字段的name属性
String name = item.getFieldName();
//获取字段value属性
String value = item.getName();
//由于浏览器的不同,所以只讲文件名分割过来
int start = value.lastIndexOf("\\");
String fileName = value.substring(start+1);
request.setAttribute(name, fileName);
System.out.println("fieldName is:"+name+" fieldValue is:"+fileName);
//保存
item.write(new File(path,fileName));//可以直接输入,也可以通过流操作。
}
}
}catch(Exception e){
e.printStackTrace();
}
%>
<script type="text/javascript">
System.out.println("aaa");
window.opener.refreshAttach();
closeWindow();
</script>