package com.jcpower.servlet;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
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.FileUploadBase.FileSizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.jcpower.listener.UploadProgress;
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 3280493783522943335L;
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
this.doPost(request, response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
request.setCharacterEncoding("utf-8");
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
//实例化一个硬盘文件工厂
DiskFileItemFactory dfif = new DiskFileItemFactory();
//设置缓冲区的大小 3M 默认10k 单位是byte
dfif.setSizeThreshold(1024*1024*3);
//设置临时文件夹 加入数据超过缓冲区大小 则会存入临时文件夹
dfif.setRepository(new File(request.getServletContext().getRealPath("/")+"WEB-INF/uploadTemp/"));
//定义文件上传组件
ServletFileUpload sfu = new ServletFileUpload(dfif);
//设置上传组件的编码
sfu.setHeaderEncoding("utf-8");
//设置单个文件的大小
sfu.setFileSizeMax(1024*1024*100);
//设置上传文件的总大小
sfu.setSizeMax(1024*1024*2000);
//给上传组件设置监听 上传过程中实时返回已上传文件的大小
sfu.setProgressListener(new UploadProgress(request));
//判断表单是否是Multipart类型
if(ServletFileUpload.isMultipartContent(request))
{
try {
//把request转换成FileItem对象集合 循环遍历 找到file类型
for(FileItem fileItem:sfu.parseRequest(request))
{
//非file对象
if(fileItem.isFormField())
{
//System.out.println(fileItem.getFieldName()+"-----"+new String(fileItem.getString().getBytes("iso-8859-1"),"utf-8"));
}else{
//如果文件存在并且大小不为0
if(fileItem.getName()!=null && fileItem.getSize()>0)
{
//获取文件的名字 包括后缀
String fileName = fileItem.getName().substring(fileItem.getName().lastIndexOf("\\")+1);
//String ext = fileName.substring(fileName.lastIndexOf("."));
//String randomFileName = UUID.randomUUID().toString()+ext;//System.currentTimeMillis()+ext;
//方式一:FileItem.write();上传完自动删除临时文件夹的内容
//获取对应file对象的输入流 并写入到服务器指定文件夹
fileItem.write(new File(request.getServletContext().getRealPath("/")+"WEB-INF/upload/"+fileName));
//方式二:自己用io实现上传 需要手动删除临时文件内容
/*InputStream is = fileItem.getInputStream();
OutputStream os = new FileOutputStream(new File(request.getServletContext().getRealPath("/")+"WEB-INF/upload/"+randomFileName));
byte [] buffer = new byte[1024];
int len;
while((len=is.read(buffer))!=-1)
{
os.write(buffer, 0, len);
}
os.close();
is.close();
fileItem.delete();*/
out.println("<script>");
out.println("function fileDown(obj,fname){obj.href='downloadServlet?fileName='+encodeURI(fname);}");
out.println("</script>");
out.println("文件名称:"+fileName+"<br><br>文件大小:"+fileItem.getSize()+" Byte<br><br><a href='javascript:void(0);' onclick=fileDown(this,'"+fileName+"')>下载</a>");
}else{
out.println("文件长度不能为0!");
}
}
}
}catch (FileNotFoundException e){
out.println("请选择要上传的文件!");
}catch (FileSizeLimitExceededException e){
out.println("上传文件的大小超过允许的范围!");
}catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}else{
out.println("此表单为普通表单!不能进行上传操作。");
}
}
}
捷创动力
- 粉丝: 0
- 资源: 4
最新资源
- 基于小程序的上门维修系统源代码(java+小程序+mysql+LW).zip
- mscomm注册的个人学习资料,欢迎使用
- mscomm串口通讯的个人学习资料,欢迎使用
- 基于小程序的书籍销售系统+node源代码(完整前后端+mysql+LW).zip
- 计算机专业学习小白的资料备份.zip
- 【JCR一区级】基于matlab斑点鬣狗算法SHO-CNN-LSTM-Attention故障诊断分类预测【Matlab仿真 5662期】.zip
- 【JCR一区级】基于matlab斑马算法ZOA-CNN-LSTM-Attention故障诊断分类预测【Matlab仿真 5663期】.zip
- 【JCR一区级】基于matlab北方苍鹰算法NGO-CNN-LSTM-Attention故障诊断分类预测【Matlab仿真 5664期】.zip
- 【JCR一区级】白冠鸡算法COOT-CNN-LSTM-Attention故障诊断分类预测【Matlab仿真 5658期】.zip
- 【JCR一区级】基于matlab布谷鸟算法CS-CNN-LSTM-Attention故障诊断分类预测【Matlab仿真 5666期】.zip
- 【JCR一区级】基于matlab被囊群算法TSA-CNN-LSTM-Attention故障诊断分类预测【Matlab仿真 5665期】.zip
- 基于Java的客户管理系统源码,CRM 带小程序 CRM小程序源码 1. 前端:Vue 2. 后端:Spring boot 3. 数据库:MySQL 4.开发语言:Java CRM客户关系管
- 【JCR一区级】基于matlab白鹭群算法ESOA-CNN-LSTM-Attention故障诊断分类预测【Matlab仿真 5660期】.zip
- 【JCR一区级】基于matlab矮猫鼬算法DMOA-CNN-LSTM-Attention故障诊断分类预测【Matlab仿真 5657期】.zip
- 【JCR一区级】基于matlab白鲸算法BWO-CNN-LSTM-Attention故障诊断分类预测【Matlab仿真 5659期】.zip
- 【JCR一区级】基于matlab白鲨算法WSO-CNN-LSTM-Attention故障诊断分类预测【Matlab仿真 5661期】.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈