• java上传文件


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

    后台:

    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";
        }// </editor-fold>
    }

    上传jsp页面

    <%@ page language="java" pageEncoding="UTF-8"%>
     <!DOCTYPE HTML>
     <html>
     <head>
      <title>文件上传</title>
     </head>
     
     <body>
      <form action="${pageContext.request.contextPath}/servlet/UploadHandleServlet" enctype="multipart/form-data" method="post">
       上传用户:<input type="text" name="username"><br/>
       上传文件1:<input type="file" name="file1"><br/>
       上传文件2:<input type="file" name="file2"><br/>
       <input type="submit" value="提交">
      </form>
     </body>
     </html>

    上传成功后:

    <%@ page language="java" pageEncoding="UTF-8"%>
     <!DOCTYPE HTML>
     <html>
     <head>
      <title>消息提示</title>
     </head>
     
     <body>
       ${message}
     </body>
     </html>
  • 相关阅读:
    DataAdapter的Fill方法(转)
    C#读取xml节点数据方法小结
    Service-Oriented Architecture,SOA(转)
    SOAP详解(转)
    WebService到底是什么?(转)
    只需要2个工具,百度云盘大文件就能用迅雷和IDM下载
    刘铁猛-深入浅出WPF-系列资源汇总
    WCF书籍
    书籍:wpf学习书籍介绍
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器(转)
  • 原文地址:https://www.cnblogs.com/chafe/p/6387372.html
Copyright © 2020-2023  润新知