博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java上传文件
阅读量:4429 次
发布时间:2019-06-07

本文共 4878 字,大约阅读时间需要 16 分钟。

借鉴别人的代码,自己再总结记录一下:

后台:

package com.sitech.easkLog;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.*;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/** * * @author administrator */@SuppressWarnings("unchecked")public class UpLoad extends HttpServlet {    /** */    private static final long serialVersionUID = 1L;    protected void processRequest(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=GBK");        String action = request.getParameter("action");        if("uploadFile".equals(action)){            this.uploadFile(request,response);  //上传文件        }    }    public void uploadFile(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=GBK");        request.setCharacterEncoding("GBK");        HttpSession session=request.getSession();        session.setAttribute("progressBar",0);      //定义指定上传进度的Session变量        String error = "";        int maxSize=50*1024*1024;        //单个上传文件大小的上限        DiskFileItemFactory factory = new DiskFileItemFactory();        //基于磁盘文件项目创建一个工厂对象        ServletFileUpload upload = new ServletFileUpload(factory);  //创建一个新的文件上传对象        try {            List items = upload.parseRequest(request);// 解析上传请求            Iterator itr = items.iterator();// 枚举方法            while (itr.hasNext()) {                FileItem item = (FileItem) itr.next();  //获取FileItem对象                if (!item.isFormField()) {
// 判断是否为文件域 if (item.getName() != null && !item.getName().equals("")) {
// 判断是否选择了文件 long upFileSize=item.getSize(); //上传文件的大小 String fileName=item.getName(); //获取文件名 //System.out.println("上传文件的大小:" + item.getSize()); if(upFileSize>maxSize){ error="您上传的文件太大,请选择不超过50M的文件"; break; } // 此时文件暂存在服务器的内存中 File tempFile = new File(fileName);// 构造临时对象 String uploadPath = this.getServletContext().getRealPath("/upload"); File file = new File(uploadPath,tempFile.getName()); // 获取根目录对应的真实物理路径 InputStream is=item.getInputStream(); int buffer=1024; //定义缓冲区的大小 int length=0; byte[] b=new byte[buffer]; double percent=0; FileOutputStream fos=new FileOutputStream(file); while((length=is.read(b))!=-1){ percent+=length/(double)upFileSize*100D; //计算上传文件的百分比 fos.write(b,0,length); //向文件输出流写读取的数据 session.setAttribute("progressBar",Math.round(percent)); //将上传百分比保存到Session中 } fos.close(); Thread.sleep(1000); //线程休眠1秒 } else { error="没有选择上传文件!"; } } } } catch (Exception e) { e.printStackTrace(); error = "上传文件出现错误:" + e.getMessage(); } if (!"".equals(error)) { request.setAttribute("error", error); request.getRequestDispatcher("error.jsp").forward(request, response); }else { request.setAttribute("result", "文件上传成功!"); request.getRequestDispatcher("upFile_deal.jsp").forward(request, response); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override public String getServletInfo() { return "Short description"; }// }

上传jsp页面

<%@ page language="java" pageEncoding="UTF-8"%>     文件上传     
上传用户:
上传文件1:
上传文件2:

上传成功后:

<%@ page language="java" pageEncoding="UTF-8"%>     消息提示      ${message}  

 

转载于:https://www.cnblogs.com/chafe/p/6387372.html

你可能感兴趣的文章
7. 单位,移动布局
查看>>
inux中bin与sbin目录的作用及区别介绍
查看>>
USACO 3.1 Contact
查看>>
Office之什么是高内聚低耦合
查看>>
一些奇怪的问题求回答
查看>>
这些年踩过的坑
查看>>
iOS开发拓展篇——如何把项目托管到GitHub
查看>>
性能优化之数据库优化
查看>>
《Cracking the Coding Interview》——第1章:数组和字符串——题目5
查看>>
D - F(x)
查看>>
发现一个很不错的东西!--百度网盘外链,下载速度很不错
查看>>
[Machine Learning]matplotlib
查看>>
[leetcode]523. Continuous Subarray Sum
查看>>
敏捷结果30天之第三天:用三个故事驱动你的一天
查看>>
BZOJ 4025: 二分图
查看>>
最少硬币问题
查看>>
SVN命令使用详解
查看>>
linux 子系统折腾记 (三)
查看>>
5-7合并图层
查看>>
伙伴系统算法
查看>>