jsp+javaBean 网站附件管理系统(未完成版)-3

    技术2022-05-11  73

    处理附件上传的JSP页面与JAVA Bean 

     

    <% @ page language = " java "  contentType = " text/html; charset=GB18030 "     pageEncoding = " GB18030 " %> <! DOCTYPE html PUBLIC  " -//W3C//DTD HTML 4.01 Transitional//EN "   " http://www.w3.org/TR/html4/loose.dtd " > < html > < head > < meta http - equiv = " Content-Type "  content = " text/html; charset=GB18030 " > < jsp:useBean id = " FUpload "  scope = " page "   class = " edu.scnu.crjy.common.UploadFiles " ></ jsp:useBean > </ head > < body > <%         String documentRoot  =  getServletContext().getRealPath( " / " );        String Dir  =  documentRoot + " appendfiles// " + request.getParameter( " childDir " );     out.println(request.getParameter( " childDir " ));     // 保存文件的路径,请确保目录存在,或改到其他目录      // 通过调用JavaBeans的方法完成上传操作      FUpload.setUploadDirectory(Dir);    FUpload.uploadFile(request); %> < script language = " javascript " >     alert( " 上传附件成功! " );    document.location.href = " ../appendfileslist.jsp?childDir=<%=request.getParameter( " childDir " )%> " </ script > </ body > </ html >

    注:这个处理上传的bean有大部分是从csdn中获得的资料

    package  edu.scnu.crjy.common; import  java.io. * ; import  javax.servlet.http.HttpServletRequest; import  javax.servlet.ServletInputStream; import  javax.servlet.ServletException; public   class  UploadFiles  {    private static String newline = " "// 设定换行符    private String uploadDirectory = "."// 默认的保存位置    private String ContentType = ""// 文件类型    private String CharacterEncoding = ""// 编码格式    // 设定文件要保存在服务器中的位置    public void setUploadDirectory(String s) {        uploadDirectory = s;    }    // 提取文件名,本方法是把用户上传的文件按照原名保存    private String getFileName(String s) {        int i = s.lastIndexOf("/");        if (i < 0 || i >= s.length() - 1{            i = s.lastIndexOf("/");            if (i < 0 || i >= s.length() - 1)                return s;        }        return s.substring(i + 1);    }    // 得到content-type    public void setContentType(String s) {        ContentType = s;        int j;        if ((j = ContentType.indexOf("boundary=")) != -1{            ContentType = ContentType.substring(j + 9);            ContentType = "--" + ContentType;        }    }    // 得到文件编码格式    public void setCharacterEncoding(String s) {        CharacterEncoding = s;    }    public void uploadFile(HttpServletRequest req) throws ServletException,            IOException {        setCharacterEncoding(req.getCharacterEncoding());        setContentType(req.getContentType());        uploadFile(req.getInputStream());    }    public void uploadFile(ServletInputStream servletinputstream)            throws ServletException, IOException {        String s5 = null;        String filename = null;        byte Linebyte[] = new byte[4096];        byte outLinebyte[] = new byte[4096];        int ai[] = new int[1];        int ai1[] = new int[1];        String line;        // 得到文件名        while ((line = readLine(Linebyte, ai, servletinputstream,                CharacterEncoding)) != null{            int i = line.indexOf("filename=");            if (i >= 0{                line = line.substring(i + 10);                if ((i = line.indexOf(""")) > 0)                    line = line.substring(0, i);                break;            }        }        filename = line;        if (filename != null && !filename.equals(""")) {            filename = getFileName(filename);            String sContentType = readLine(Linebyte, ai, servletinputstream,                    CharacterEncoding);            if (sContentType.indexOf("Content-Type">= 0)                readLine(Linebyte, ai, servletinputstream, CharacterEncoding);            // 建立新文件的文件句柄            File file = new File(uploadDirectory, filename);            // 建立生成新文件的输出流            FileOutputStream fileoutputstream = new FileOutputStream(file);            while ((sContentType = readLine(Linebyte, ai, servletinputstream,                    CharacterEncoding)) != null{                if (sContentType.indexOf(ContentType) == 0 && Linebyte[0== 45)                    break;                if (s5 != null{                    // 写入新文件                    fileoutputstream.write(outLinebyte, 0, ai1[0]);                    fileoutputstream.flush();                }                s5 = readLine(outLinebyte, ai1, servletinputstream,                        CharacterEncoding);                if (s5 == null || s5.indexOf(ContentType) == 0                        && outLinebyte[0== 45)                    break;                fileoutputstream.write(Linebyte, 0, ai[0]);                fileoutputstream.flush();            }            byte byte0;            if (newline.length() == 1)                byte0 = 2;            else                byte0 = 1;            if (s5 != null && outLinebyte[0!= 45                    && ai1[0> newline.length() * byte0)                fileoutputstream.write(outLinebyte, 0, ai1[0]                        - newline.length() * byte0);            if (sContentType != null && Linebyte[0!= 45                    && ai[0> newline.length() * byte0)                fileoutputstream.write(Linebyte, 0, ai[0- newline.length()                        * byte0);            fileoutputstream.close();        }    }    // readLine函数把表单提交上来的数据按行读取    private String readLine(byte Linebyte[], int ai[],            ServletInputStream servletinputstream, String CharacterEncoding) {        try // 读取一行            ai[0= servletinputstream.readLine(Linebyte, 0, Linebyte.length);            if (ai[0== -1)                return null;        } catch (IOException ex) {            return null;        }        try {            if (CharacterEncoding == null{                // 用默认的编码方式把给定的byte数组转换为字符串                return new String(Linebyte, 0, ai[0]);            } else {                // 用给定的编码方式把给定的byte数组转换为字符串                return new String(Linebyte, 0, ai[0], CharacterEncoding);            }        } catch (Exception ex) {            return null;        }    }}

    最新回复(0)