javaweb文件的上传和下载

文件的下载

package sxc;



import org.apache.commons.io.IOUtils;
import sun.misc.BASE64Encoder;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;

public class Servlet1  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、获取文件的名字
        String downloadname="美女.jpg";
        //2、读取下载的内容
        ServletContext servletContext= getServletContext();
        InputStream stream = servletContext.getResourceAsStream("/"+downloadname );
//        System.out.println(stream);
        String mimeType = servletContext.getMimeType("/" + downloadname);
        //4、回传前,告诉客户端返回的数据类型
        resp.setContentType(mimeType);
        System.out.println("返回的数据类型是"+mimeType);
        //5、还要告诉客户端,收到的数据适用于下载的(还是通过使用响应头)
            //content-Disposition表示收到的数据如何处理
            //attament表示附件,表示下载使用
            //filename=表示指定下载的文件名
            //url编码是为了把汉字转换成为%xx%xx的格式
            //支持谷歌和ie浏览器
//        resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode("女人.jpg","utf-8"));
             //支持火狐浏览器,不支持ie浏览器
//        resp.setHeader("Content-Disposition","attachment;filename==?UTF-8?B?"+new BASE64Encoder().encode("中文.jpg".getBytes("utf-8")) +"?=");
        //如果是火狐浏览器,使用Base64编码
        if(req.getHeader("User-Agent").contains("Firefox")){
            resp.setHeader("Content-Disposition","attachment;filename==?UTF-8?B?"+new BASE64Encoder().encode(downloadname   .getBytes("utf-8")) +"?=");
//        如果不是火狐浏览器使用url编码
        }else {
            resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(downloadname,"utf-8"));
        }
        //3、把下载的文件回传到客户端
        ServletOutputStream outputStream = resp.getOutputStream();
        IOUtils.copy(stream,outputStream);
        System.out.println(req.getHeader("User-Agent"));





    }
}

Base64编码

package sxc;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.IOException;

public class Base64 {
    public static void main(String[] args) throws IOException {
        String str="你好呀";
        //创建一个编码器
        BASE64Encoder base64Encoder = new BASE64Encoder();
        //调用编码的方法
        String encode = base64Encoder.encode(str.getBytes());
        System.out.println(encode);

        //创建一个解码器
        BASE64Decoder base64Decoder=new BASE64Decoder();
        byte[] bytes = base64Decoder.decodeBuffer(encode);
        String str1=new String(bytes,"utf-8");
        System.out.println(str1);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值