jsp+Servlet上传文件、下载、显示
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
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 CommonsFile {
private static final String UPLOAD_DIR="phoneImg"; //保存路径
private static final int MEMORY_THR=1024*1024*3;//3M
private static final int MAX_FILE_SIZE=1024*1024*200;//200M
private static final int MAX_REQ_SIZE=1024*1024*1024; //1G
/**
* 上传文件
*/
public static HashMap<String, Object> uploadFile(HttpServletRequest request){
//配置文件上传信息
DiskFileItemFactory factory=new DiskFileItemFactory();
//配置内存临界值,超过范围存入临时目录中
factory.setSizeThreshold(MEMORY_THR);
//设置超出范围存入的地方
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
ServletFileUpload upload=new ServletFileUpload(factory);
//配置上传参数
upload.setFileSizeMax(MAX_FILE_SIZE);
//请求最大值
upload.setSizeMax(MAX_REQ_SIZE);
//处理编码格式
upload.setHeaderEncoding("UTF-8");
//创建对象,接收表单其他数据
HashMap<String , Object> map=new HashMap<String, Object>();
//判断上传文件的类型,确定是file文件还是text内容
String uploadPath=request.getServletContext().getRealPath("")+File.separator+UPLOAD_DIR;
//判断是否存在
File uploadDir=new File(uploadPath);
if(!uploadDir.exists()){
uploadDir.mkdir();
}
//解析传递过来的参数
try {
List items=upload.parseRequest(request);
Iterator<FileItem> iter=items.iterator();
while(iter.hasNext()){
//取出每个表单元素对象
FileItem item=iter.next();
//判断文件还是非文件
if(item.isFormField()){
//获取值保存在map中
String value=item.getString("UTF-8");
String name=item.getFieldName();
map.put(name, value);
}else{
//文件操作
String type=item.getFieldName();
String fileName=new File(item.getName()).getName();
//指定存放位置
String filePath=uploadPath+"/"+fileName;
File storeFile=new File(filePath);
//将当前上传的文件名存入数据库中
map.put(type, fileName);
//将文件保存到服务器中
item.write(storeFile);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/**
* 显示上传的文件
*/
public static void display(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
//上传文件目录
String uploadPath = request.getServletContext().getRealPath("/uploadimg");
//定义 集合 存放文件名称
/*Map<String, String> fileNameMap = new HashMap<String, String>();*/
List<String> list = new ArrayList<String>();
//根据路径生成 文件
File file = new File(uploadPath);
//调用方法
judgeFile(file, list);
request.setAttribute("comlist", list);
request.getRequestDispatcher("../personal.jsp").forward(request, response);
}
public static void judgeFile(File file,List list){
if(!file.isFile()){
File[] files= file.listFiles();
for (File f : files) {
judgeFile(f, list);
}
}else{
//map.put(file.getName(), file.getName());
list.add(file.getName());
}
}
/**
* 下载文件
*/
public static void downloadFile(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
//获取下载文件名称
String fileName = req.getParameter("filename");
fileName = new String(fileName.getBytes("iso-8859-1"),"utf-8");
//确定下载的目录文件夹
String fileSavePath = req.getServletContext().getRealPath("/upload");
//拼接下载的文件路径
File file = new File(fileSavePath+"\\"+fileName);
if(!file.exists()){
req.setAttribute("message", "下载的文件不存在....");
req.getRequestDispatcher("../personal.jsp").forward(req, res);
return;
}
//如果文件存在 则下载
res.setHeader("content-disposition","attachment; filename="+URLEncoder.encode(fileName, "utf-8"));
//已文件流的方式 进行下载操作
FileInputStream in = new FileInputStream(file);
OutputStream out = res.getOutputStream();
byte buffer[] = new byte[1024];
int lne = 0;
//循环读取
while((lne=in.read(buffer))>0){
out.write(buffer, 0, lne);
}
in.close();
out.close();
}
public static Map<String,Object> fileUpload(HttpServletRequest request) {
// 配置文件上传信息
DiskFileItemFactory fac = new DiskFileItemFactory();
// 配置内存临界值
fac.setSizeThreshold(MEMORY_THR);
// 设置超出范围的临时目录
fac.setRepository(new File(System.getProperty("java.io.tmpdir")));
// 创建文件上传对象
ServletFileUpload upload = new ServletFileUpload(fac);
// 配置上传文件参数
upload.setFileSizeMax(MAX_FILE_SIZE);
// 配置请求最大值
upload.setSizeMax(MAX_REQ_SIZE);
// 处理数据编码
upload.setHeaderEncoding("utf-8");
// 创建对象接收表单中的其他数据
Map<String, Object> formData = new HashMap<String, Object>();
// 设置上传文件保存路径
String savePath = request.getServletContext().getRealPath("/StrategyImages");
File saveDir = new File(savePath);
// 判断文件夹是否存在,不存在则创建
if (!saveDir.exists()) {
saveDir.mkdir();
}
// 获取表单传递的数据
try {
List<FileItem> fiList = upload.parseRequest(request);
// 遍历获取到的内容
Iterator<FileItem> it = fiList.iterator();
while (it.hasNext()) {
FileItem fi = it.next();
// 判断是否为文件,文件上传,其他数据保存到map
if (fi.isFormField()) {
String key = fi.getFieldName();
String value = fi.getString();
formData.put(key, value);
} else {
fi.write(new File(savePath + "/" + fi.getName()));
formData.put("src", "http://localhost:8080/FPTravel/StrategyImages/" + fi.getName());
}
}
} catch (Exception e) {
e.printStackTrace();
}
return formData;
}
/**
* 删除文件
*/
public static void delFile(String path){
File file=new File(patha);
if(file.exists()&&file.isFile()){
file.delete();
System.out.println("成功");
}
}
}
这里通过一个上传头像加qi它数据然后以ajax方式提交数据举一个例子
<form id="form1">
<input type="file" name="g_header" id="headimgfile" style="display:none;">
<img style="width:120px;height:130px;" src="../images/pic/1.png" class="updateheadimg" id="heImg">
</form>
$('#form1').submit(function(){
var img="";
/*---上传头像- */
$('#heImg').click(function(){
$("#headimgfile").click();
$("#headimgfile").change(function(e){
var url = window.URL.createObjectURL(e.target.files[0]);
$("#heImg").attr("src",url).attr("style","height:120px;","width:130px");
});
})
$("#headimgfile").change(function(e){
img=e.target.files[0];
})
var form = new FormData();
form.append("g_header",img);
form.append("g_name", $('#g_name').val());
form.append("g_sex", $('input:radio[name="g_sex"]:checked').val());
$.ajax({
url:'../../servlet/BackUser?method=addGuider',
type:'post',
data:form,
dataType:'text',
processData : false, // 使数据不做处理
contentType : false, // 不要设置Content-Type请求头
success:function(ret){
if(ret=='true'){
layer.msg('添加成功',function(){
icon:1
time:3000
})
}
}
})
})
Servlet 中:
public void upload(HttpServletRequest request, HttpServletResponse response) {
HashMap<String, Object> map=CommonsFile.uploadFile(request);
String g_header=(String)map.get("g_header");
String g_name=(String) map.get("g_name") ;
String g_sex=(String)map.get("g_sex") ;
....
}