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

本文介绍了一个使用JSP和JavaBean实现的附件上传功能,包括设置上传目录、解析文件名及内容类型等关键步骤。

处理附件上传的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;
        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值