JSP

JSP第四章

本章学习要点:

  • 上传

  • 下载

上传

1)添加jar(commons-fileupload.jar,commons-io.jar)
2)表单的提交方式是post ,内容 enctype=”multipart/form-data”
3)获取服务器路径
String serverPath = session.getServletContext().getRealPath(“/upload”);
4)创建文件夹
File filePath = new File(serverPath);
//判断创建
if (!filePath.exists()) {
filePath.mkdir();
}
5)获得文件列表工厂对象
FileItemFactory factory = new DiskFileItemFactory();
6)获得上传对象
ServletFileUpload upload = new ServletFileUpload(factory);

List list = null;
//保存上传的文件名////////////////////////
List fileNames =new ArrayList();
6)设置文件及所有文件大小
try {
//单个文件的限制大小 1024=1k 100kb
//upload.setFileSizeMax(1024 * 100);

//所有文件的限制大小 2M=2*1024*1024
upload.setSizeMax(500 * 1024);
7)//判断enctype类型
if (ServletFileUpload.isMultipartContent(request)) {
获得文件列表
list = upload.parseRequest(request);
.遍历数据
for (FileItem item : list) {
判断是否是普通字段
if (item.isFormField()) {
name=”udis”
System.out.println(item.getFieldName() + “=”
+ item.getString(“utf-8”));
+ } else {
//获得上传的文件名
String upString = item.getName();

//保存////////////////////
fileNames.add(upString);
//////////////////////////
//写入
File saveFile = new File(filePath, upString);
item.write(saveFile);
}
}
} else {
out.println(“您上传的内容类型不符合要求:【 multipart/form-data 】”);
}
//跳转到down.jsp页面/////////////////////////
request.setAttribute(“fileNames”, fileNames);
request.getRequestDispatcher(“down.jsp”).forward(request, response);
/////////////////////////////////////////////
} catch (FileSizeLimitExceededException ex) {
out.println(“单个文件大小超过它的范围” + ex.toString());
} catch (FileUploadBase.SizeLimitExceededException e1) {
out.println(“总文件大小超过它的范围” + e1.toString());
}

下载

1)获取服务器路径
String fileDir = session.getServletContext().getRealPath(“/upload”);
2)获得表单提交的数据
String aFileName = request.getParameter(“fileName”);
String online = request.getParameter(“online”);
3)判断
boolean isOnLine = (online != null) ? true : false;
4)文件输入流
FileInputStream in = null;

输出流
ServletOutputStream outs = null;

try {

        if (isOnLine) { //直接打开
            URL u = new URL("file:///" + fileDir + aFileName);
            response.setContentType(u.openConnection().getContentType());
            response.setHeader("Content-Disposition",
                    "inline; filename=" + aFileName);
        } else { //下载
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-Disposition",
                    "attachment; filename=" + aFileName);
        }
        //文件流对象
        in = new FileInputStream(fileDir + "\\" + aFileName);
        outs = response.getOutputStream();

        //读取数据
        int aRead = 0;
        while ((aRead = in.read()) != -1 & in != null) {
            outs.write(aRead); //写入
        }
        outs.flush(); //刷新

        //  java.lang.IllegalStateException: getOutputStream() has already been called for this response

        out.clear();
        out = pageContext.pushBody();

    } catch (Throwable e) {
        e.printStackTrace();
    } finally {
        try {
            in.close(); //关闭流
            outs.close();
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
%>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值