文件上传下载

来源:互联网 发布:济南行知小学怎么样 编辑:程序博客网 时间:2024/06/16 18:11

一、文件上传
Upload.html

<formaction="upload"method="post" enctype="multipart/form-data"><inputtype="file"name="file"><inputtype="submit"value="上传"></form>

http://commons.apache.org/proper/commons-fileupload/using.html
UploadServlet.java
使用 apache 提供的 commons-io 和 commons-fileupload 包

package com.keving.upload;import java.io.File;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/* * 文档的代码 */public class UploadServlet02 extends HttpServlet {    @Override    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        // 获取上下文路径        String path = req.getServletContext().getRealPath("/");        // System.out.println(path);        // 1、创建文件条目工厂        DiskFileItemFactory factory = new DiskFileItemFactory();        // 2、设置缓存大小        factory.setSizeThreshold(3 * 1024);        // 3、设置临时目录,该步骤可以省略        File temp = new File(path, "temp");        if (!temp.exists()) {            temp.mkdirs();        }        factory.setRepository(temp);        // 4、上传处理        ServletFileUpload upload = new ServletFileUpload(factory);        // 5、最大限制        upload.setFileSizeMax(3 * 1024 * 1024);        upload.setHeaderEncoding("utf-8");        try {            List<FileItem> items = upload.parseRequest(req);            if (null != items) {                for (FileItem item : items) {                    // 如果不是普通表单并且已选择上传内容则处理                    if (!item.isFormField() && item.getName() != null && !item.getName().equals("")) {                        String fileName = item.getName();                        // String filePath = path + "/upload/"+fileName;                        File uploader = new File(path + "/upload/");                        if (!uploader.exists()) {                            uploader.mkdirs();                        }                        item.write(new File(uploader, fileName));                    }                }            }        } catch (FileUploadException e) {            // TODO Auto-generated catch block        } catch (Exception e) {            // TODO Auto-generated catch block        }    }}

二、文件下载
文件的下载有两种方式:
⑴利用超链接的方式下载
缺点: 只有不认识的内容即浏览器不能直接打开的内容浏览器会自动下载;当浏览器
碰见自己能认识的/能打开的内容时,就会直接显示出来
⑵利用第三方下载方式
①获取要下载的文件名
②相对路径转绝对路径
③向响应的头部添加信息

download.html

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><a href="img/dog.jpg">jpg</a><a href="bigdownload?filename01=007.pdf">download</a></body></html>

BigFileDownloadServlet

String filename = request.getParameter("filename01");//      String filename = request.getParameter("007.pdf");        System.out.println(filename);        String path = request.getServletContext().getRealPath("/img/"+filename);         response.setHeader("content-disposition", "attachment;fielname="+filename);        File file = new File(path);        if(file.exists()){            FileInputStream is = new FileInputStream(file);            ServletOutputStream os = response.getOutputStream();            byte[] bs = new byte[1024];            int len = -1;            while(-1!=(len = (is.read(bs)))){                os.write(bs,0,len);            }            os.flush();            os.close();            is.close();        } else {            System.out.println("文件路径找不到");        }

ImgDownloadServlet

//      response.setContentType("application/x-msdownload");//      response.addHeader("content-disposition","attachment;filename=dog.jpg");        response.setContentType("octet-stream");        InputStream is = request.getServletContext().getResourceAsStream("/img/dog.jpg");        BufferedInputStream input =  new BufferedInputStream(is);        ServletOutputStream os = response.getOutputStream();        byte[] bytes = new byte[input.available()];        input.read(bytes);        os.write(bytes);        input.close();        os.close();

PdfDownloadServlet

response.setContentType("application/pdf");        String path = getServletContext().getRealPath("/img/003常用对象.pdf");        System.out.println("path    "+path);        File file = new File(path);        String filename = file.getName();        System.out.println("filename    "+filename);        response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));

浏览器显示图片

response.setContentType("image/png");        OutputStream os = response.getOutputStream();        String sourcePath = request.getServletContext().getRealPath("/img/dog.jpg");        InputStream is = new FileInputStream(new File(sourcePath));        byte[] bs = new byte[1024];         int len = -1;        while(-1!=(len=is.read(bs))){            os.write(bs,0,len);        }        os.flush();        os.close();        is.close();
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信号手机号换了密码忘记了怎么办 被加盟网店托管骗了怎么办 善林金融倒闭投资者的钱怎么办? 微信支付密码忘了怎么办没绑卡 美团外卖没有骑手接单怎么办 发微信的"发送"没有了怎么办 华硕电脑下面的任务栏卡住了怎么办 微信登别人电脑上忘记退了怎么办 买手机买全新结果买到翻新机怎么办 苹果手机激活锁忘了id账号怎么办 淘宝很多产品都需要3c怎么办 小米mix装在兜里还能解锁怎么办 痰咳不出来憋的嘴唇紫了怎么办 京东闪电退款后不给退货怎么办 我的中国银行卡在异地被冻结怎么办 qq密保号码换了验证不了怎么办 qq登陆需要密保手机验证怎么办 微信漂流瓶被投诉收不到回复怎么办 电视的屏幕出现三条黑线怎么办 付了定金的房子不想要了怎么办 顾客刚买了东西就退怎么办 飞机票买了但是没有报团怎么办 日本寄东西回来深圳海关扣了怎么办 xp框架安装模块后无限重启怎么办 手机百度云下载的文件不见了怎么办 百度云手机号换了文件不见了怎么办 好劵app提现密码忘了要怎么办 微信上买的衣服不给退货怎么办 在微信上买的衣服不给退货怎么办 贴贴纸的地方出现色差了怎么办 贴在玻璃上的贴纸撕掉后有胶怎么办 魅族手机部分时间上划失效怎么办 别人电脑上c盘文件无权访问怎么办 网络已连接但上不了网怎么办 asp复选框选中的有重复值怎么办 邮件在邮递中出现损坏怎么办呢? 爱彩彩票资金密码忘记了怎么办 注册彩票网站忘了资金密码怎么办 电车电瓶加水后电压变低怎么办 电动车电瓶四块电池坏了一块怎么办 把小孩的玩具修坏了怎么办