精华内容
下载资源
问答
  • 2017-08-24 11:40:47

    我们可以查看对应的压缩包文件头发现没有了 Content-Length,而多了Transfer-Encoding:chunked  , 两个不能同时存在。
    说明压缩包经过服务器处理后,不知道大小了,需要动态获取文件大小。
    只要我们把  LoadModule deflate_module modules/mod_deflate.so  前面加#注释掉即可。



    更多相关内容
  • 下载文件时文件名乱码和文件大小未知 快速解决文件名乱码 快速解决文件大小未知 完整项目示例 参考资料 下载文件时文件名乱码和文件大小未知 这个问题引发自标准兼容问题 FireFox 对规范要求严格, 而其他浏览器...

    下载文件时文件名乱码和文件大小未知

    这个问题引发自标准兼容问题
    FireFox 对规范要求严格, 而其他浏览器相对宽容, 所以其他浏览器会兼容, 而FireFox则不做处理
    解决方案是添加 Content-Disposition 响应头

    快速解决文件名乱码

    传统 File 类型文件写法( java 1.4 ~ java 6 ):

    File file = getFile();
    String filename = java.net.URLEncoder.encode(file.getName(), "UTF-8");
    response.setHeader("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + filename);
    

    新IO Path 类型文件写法( java 7 ~ java 13 ):

    Path file = Paths.get("E:\\Downloads\\测试文件.pdf");
    String filename = file.getFileName().toString();
    filename = URLEncoder.encode(filename, StandardCharsets.UTF_8.displayName());
    String disposition = "attachment;filename*=utf-8'zh_cn'" + filename;
    response.addHeader("Content-Disposition", disposition);
    

    重点

    重点在这一行:

     "attachment;filename*=utf-8'zh_cn'" + filename
    

    filename*=utf-8'zh_cn' 后面直接加文件名

    快速解决文件大小未知

    传统IO

    File file = new File("E:\\Downloads\\测试文件.pdf");
    long fileSize = file .length();
    response.setContentLength((int) fileSize);
    

    新IO

    Path file = Paths.get("E:\\Downloads\\测试文件.pdf");
    long fileSize = Files.size(file);
    response.setContentLength((int) fileSize);
    

    重点

    给 response 设置 Content-Length 头就可以解决这个问题

    response.setContentLength((int) fileSize);
    

    完整类代码

    package cc.momas;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.net.URLEncoder;
    import java.nio.charset.StandardCharsets;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    /**
     * @author Sod-Momas
     * @since 2020.01.16
     **/
    @WebServlet(value = "/download")
    public class DownloadServlet extends HttpServlet {
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // 解决乱码,一般写在过滤器 filter里
            request.setCharacterEncoding(StandardCharsets.UTF_8.displayName());
            response.setCharacterEncoding(StandardCharsets.UTF_8.displayName());
            response.setContentType("text/html;charset=utf-8");
    
            // 获取文件
            Path file = Paths.get("E:\\Downloads\\测试文件.pdf");
            // 检测文件是否存在
            if (Files.notExists(file)) {
                response.getWriter().write("指定文件不存在:" + file.toAbsolutePath());
                return;
            }
    
            // 获取文件名
            String filename = file.getFileName().toString();
            // 获取文件大小,单位是byte
            long fileSize = Files.size(file);
    
            // 将文件名URL编码
            filename = URLEncoder.encode(filename, StandardCharsets.UTF_8.displayName());
            // 添加触发下载的前缀
            // 规范参考 : Content-Disposition https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Disposition
            String disposition = "attachment;filename*=utf-8'zh_cn'" + filename;
    
            // 添加 Content-Disposition 告诉浏览器数据展现的方式是附件下载,并且提供文件名
            response.addHeader("Content-Disposition", disposition);
            // 添加 Content-Length 告诉浏览器数据的长度,单位是 byte
            response.setContentLength((int) fileSize);
            // 添加 Content-Type 告诉浏览器这是一个二进制流
            response.setContentType("application/octet-stream");
    
            // 把文件从本地复制到 response 输出流输出给前端
            Files.copy(file, response.getOutputStream());
        }
    }
    
    

    完整项目示例

    请访问我的码云仓库获取最新代码:

    https://gitee.com/Sod-Momas/servlet-download-example

    参考资料

    博客

    MDN

    • Content-Disposition Content-Disposition 响应头的作用
    • Content-Type Content-Type 实体头的作用
    • Content-Length Content-Length 是一个实体消息首部,用来指明发送给接收方的消息主体的大小,即用十进制数字表示的八位元组的数目。

    RFC

    展开全文
  • 这应该工作,我测试它,它适用于我:void downloadFromUrl(URL url, String localFilename) throws IOException {InputStream is = null;FileOutputStream fos = null;try {URLConnection urlConn = url.open...

    这应该工作,我测试它,它适用于我:

    void downloadFromUrl(URL url, String localFilename) throws IOException {

    InputStream is = null;

    FileOutputStream fos = null;

    try {

    URLConnection urlConn = url.openConnection();//connect

    is = urlConn.getInputStream(); //get connection inputstream

    fos = new FileOutputStream(localFilename); //open outputstream to local file

    byte[] buffer = new byte[4096]; //declare 4KB buffer

    int len;

    //while we have availble data, continue downloading and storing to local file

    while ((len = is.read(buffer)) > 0) {

    fos.write(buffer, 0, len);

    }

    } finally {

    try {

    if (is != null) {

    is.close();

    }

    } finally {

    if (fos != null) {

    fos.close();

    }

    }

    }

    }

    如果你想让它在后台运行,只需在一个线程中调用它:

    Thread download = new Thread(){

    public void run(){

    URL url= new URL("http://overpass-api.de/api/interpreter?data=area%5Bname%3D%22Hoogstade%22%5D%3B%0A%28%0A++node%28area%29%3B%0A++%3C%3B%0A%29+%3B%0Aout+meta+qt%3B");

    String localFilename="mylocalfile"; //needs to be replaced with local file path

    downloadFromUrl(url, localFilename);

    }

    };

    download.start();//start the thread

    展开全文
  • 直接上代码: // 字符串转InputStream byte[] manifestPlistBytes = manifestPlistStr.getBytes("UTF-8"); InputStream input = new ByteArrayInputStream(manifestPlistBytes); String filename = System....

    直接上代码: 

            // 字符串转InputStream
            byte[] manifestPlistBytes = manifestPlistStr.getBytes("UTF-8");
            InputStream input = new ByteArrayInputStream(manifestPlistBytes);
    
            String filename = System.currentTimeMillis() + "manifest.plist";
    
            int len = 0;
            byte[] bytes = new byte[1024];
            ServletOutputStream servletOutputStream = resp.getOutputStream();
    
            resp.setContentType("application/octet-stream");
    
            resp.setHeader("Accept-Ranges", "bytes");
            resp.setHeader("Content-Length", String.valueOf(manifestPlistBytes.length));
    
            resp.setHeader("Content-Disposition", "attachment; filename=" + filename);
    
            resp.setCharacterEncoding("UTF-8");
    
            while ((len = input.read(bytes)) > 0) {
                servletOutputStream.write(bytes, 0, len);
            }
            servletOutputStream.close();
            input.close();

    关键代码:

            resp.setHeader("Accept-Ranges", "bytes");
            resp.setHeader("Content-Length", String.valueOf(manifestPlistBytes.length));

    参考网上资料和jfinal源码。

     

    展开全文
  • "这个压缩文件格式未知或者数据已经被损坏"解决方法1.如果是从网上下载的压缩文件,很有可能是网站提供的本身就是损坏的压缩文件。如果重新下载之后仍然是损坏的,可以从其他网站下载。2.尝试使用WinRAR软件自身的...
  • 下载进度条演示文件大小未知长度已经下载0完成进度0%//文件长度var filesize=0;function $(obj) {return document.getElementById(obj);}//设置文件长度function setFileSize(fsize) {filesize=fsize;$("filesize")....
  • 今天发布文章时,在上传图片的时候出现了一个错误,错误信息是“错误原因:未知错误”。zblog上传文件失败一开始我以为是图片格式不对,仔细看了之后,确实是jpg文件,一向都没有问题的。随后我又随便找了一张jpg的...
  • 很多朋友都会遇到这样的情况,打开"我的电脑",本地磁盘图标显示未知图标,这是怎么回事?能解决吗?相信很多小白电脑的人都不知道怎么做。下面小编就为大家解决方法,确实很有效,希望对大家有所帮助!可能原因:...
  • 今天遇到一个问题,就是下载的zip文件打不开,一直显示文件被损坏。 本来觉得是后端的问题,但是排除了好久,确实没有问题,postman也实验成功。 后来发现系统main.js中引入了mock数据,影响了axios请求,造成了...
  • 未知命令casstoolbox

    千次阅读 2020-12-20 05:56:57
    技术文档主体内容:可以认为是页面最想表达的内容总和。对于内容详情页来说,主体内容指从标题开始至正文内容结束,翻页区域也被视为主体内容,文章后的评论、分享、推荐等不视为主体内容。首屏:用户点击搜索结果后...
  • 如果点确定升级,就访问服务器上返回–下载地址的url(okhttp,DownloadManager),下载的进度条显示方式通知栏、弹窗进度条百分比、自定义圆环显示。 一、下载Apk的两种方式(okhttp,DownloadManager) 1.Download...
  • 当进入Window的磁盘管理实用程序,发现磁盘是未知的,未初始化的,未分配的,那么如何修复未初始化的磁盘?还有丢失数据之后怎么找回?”第1部分:初始化磁盘意味着什么?初始化存储设备(非常类似于格式化过程)是一...
  • 首先让电脑的隐藏文件全部显示(具体方法看文章最后),在对电脑的检查过程中小编发现硬盘里有隐藏文件名为autorun.inf,这是一个双击磁盘会自动运行制定某个文件的程序,将其全部删除之后在重新打开我的电脑,发现...
  • MYSQL导入SQL文件失败的解决方案1、sql文件导入MYSQL出现未知的问题2、解决方法2.1、修改配置文件2.2、在cmd中进行导入 1、sql文件导入MYSQL出现未知的问题 2、解决方法 2.1、修改配置文件 mysql根据配置文件会...
  • 4.将下载的zip文件解压到本地(文件大小超过50KB时报文件被损坏);分析:既然报文件被损坏,肯定就是因为下载文件文件没有读取完全。程序肯定不会骗人,但是当时在解决这个问题的时候,就是不愿意相信是下载的问题,...
  • IE浏览器提示未知发布者安全警告怎么办IE浏览器提示未知发布者安全警告怎么办 IE浏览器提示未知发布者安全警告的解决方法, IE浏览器提示未知发布者怎么办?安下小编就来分析一下. 1.打开IE浏览器,从右上角打开...
  • java response输出文件

    千次阅读 2021-02-26 15:15:03
    1、设置ContentTyperesponse....2、设置文件名,并指定编码格式fileName = URLEncoder.encode("浏览器要显示的文件名", "UTF-8");response.setCharacterEncoding("UTF-8");3、将文件名addHeaderresponse.addHe...
  • 前几天,写了一篇关于如何上传图片保存至FTP服务器的文章,今天继续把上传到FTP服务器的图片下载下来,在页面中进行显示。也就是满足了我们日常代码demo中,页面需要动态加载的图片的实例的实现。(不再需要手动把...
  • 近日有用户使用的win7操作系统发现桌面图标变异常,桌面软件图标都变得白色或未知图标(如下图所示),导致无法正常打开软件程序,出现这种现象很有可能是桌面图标缓存出现问题,下面是豆豆整理的各种纠结方法,如果...
  • 同事用腾讯微云把照片传给我,但是我死活下载不下来,总是突然停止,然后提示——未知大小下载失败。 用过的方法 在网页版上下载——出现问题:总是突然停止,提示“未知大小下载失败” 让朋友先保存文件,再把...
  • CentOS7,打算当自己平时练手用的服务器,今天拿了自己的移动硬盘,想把之前的东西拷过去,但是 mount 的时候发现 mount 不上去(我的是 exFat 格式的也就是 fat64,支持 macOS和 Windows 的文件互传)。 思考 那 ...
  • 总计有以下以下9种:文件的标题名、文件的属性(只读、存档,隐藏等)、文件的创建时间、文件的最后访问时间、文件的最后修改时间、文件大小的高位双字、文件大小的低位双字、保留、保留。在这里只有文件标题名和...
  • 文件的上传和显示操作比较简单。另外就是在文件上传到项目路径的静态资源文件夹resources/下。还可以上传到mongodb中。 这次使用Springboot提供了的静态资源的映射方式 你可以添加一个外部文件夹并将其作为一个...
  • Python爬取图片显示似乎不支持此文件格式

    千次阅读 热门讨论 2020-10-28 10:41:40
    在学习Python爬虫时,模仿demo自己写一遍的时候,发现保存到文件的图片点开后显示似乎不支持此文件格式,一开始以为是正则没写对,然后查看图片的大小后发现只有80多k,检查后发现问题如下: 出现的错误: 原因是...
  • 记录一下自己在工作中用到XFTP上传文件到服务器(JAR包上传构建测试环境)时出现的问题: 起因:前两天构建环境上传文件还...排除软件问题,上传其他文件(excel小文档)上传出现0KB错误情况,同样无法上传,排除上...
  • java+大文件上传下载

    千次阅读 2019-08-26 11:26:20
    文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件。而且支持断点续传。 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场景...
  • 很早之前,就看到过很多网站,除了本身某个地址可以显示html网页之外,其他有些网站路径下面的子路径: ... 就像本地电脑中的子文件夹一样,可以以列表形式显示文件
  • Gzip (GNU zip) 是一个压缩工具,用于减少文件大小。默认原始文件被替换成压缩文件并以后缀名为 .gz 结尾的文件。解压缩文件使用 gunzip 命令,恢复原始文件。语法:gzip...gunzip...举例:$ gzipfile1.txtfile2.txt...
  • 文件上传(显示进度条、上传速度)

    千次阅读 2020-04-01 23:00:51
    在以下情况中,请使用 POST 请求: 无法使用缓存文件(更新服务器上的文件或数据库) 向服务器发送大量数据(POST 没有数据量限制) 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠 FormData对象 使用...
  • 浏览器与服务器建立连接后,通过Asp.Net...,以此告诉浏览器待下载文件大小,这样浏览器就知道它要下载文件有多大了,利用这个参照值来避免因文件大小未知而导致中途下载失败。 转载于:https://www.cnblogs.co...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,050
精华内容 22,020
关键字:

下载文件显示未知大小