admin 管理员组

文章数量: 1184232

因为公司用的分布式文件系统上传文件后返回的是 http文件路径,当文件是图片是,用a标签下载会直接打开而不是下载,所以找了下怎么通过浏览器下载远程服务器上的图片。网上大部分都是后台代码,现在把前端后台一起整合一下。

@RequestMapping(value = "/core/downloadNet")
public void downloadNet(HttpServletResponse response,HttpServletRequest request,String url) throws MalformedURLException {
 
    String filename="二维码.JPEG";
    //获取浏览器用户代理
    String agent=request.getHeader("User-Agent");
    try {
        //根据浏览器不同处理文件名防止中文乱码
        if(agent.contains("MSIE")){
            filename=URLEncoder.encode(filename,"utf-8");
            filename=filename.replace("+"," ");
        }else if(agent.contains("Firefox")){
            BASE64Encoder base64Encoder=new BASE64Encoder();
            filename="=?utf-8?B?"+base64Encoder.encode(filename.getBytes("utf-8"))+"?=";
        }else{
            filename=URLEncoder.encode(filename,"utf-8");
        }
        //设置文件头:最后一个参数是设置下载文件名
        response.setHeader("Content-Disposition","attachment;filename="+filename);
        //设置文件ContentType类型,这样设置,会自动判断下载文件类型
        response.setContentType("application/multipart/form-data");
        URL fileUrl = new URL(url);
        URLConnection conn = fileUrl.openConnection();
        ServletOutputStream out = response.getOutputStream();
        int BUFFER = 1024*10;
        byte data[] = new byte[BUFFER];
        BufferedInputStream bis = null;
        //获取文件输入流
        InputStream fis = conn.getInputStream();
        int read;
        bis = new BufferedInputStream(fis,BUFFER);
        while((read = bis.read(data)) != -1){
            out.write(data, 0, read);
        }
        fis.close();
        bis.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

前端要用from表单请求,不能用ajax请求

function dowloadPic(){
//这里就是远程服务器上的文件路径
    let urls=$("#qrUrl").attr("src");
    var url = "/core/downloadNet.do";
    var fileName = "testAjaxDownload.txt";
    var form = $("<form></form>").attr("action", url).attr("method", "post");
    form.append($("<input></input>").attr("type", "hidden").attr("name", "url").attr("value", urls));
    form.appendTo('body').submit().remove();
}

本文标签: 网络 浏览器 标签 文件 图片