精华内容
下载资源
问答
  • 下载不了pdf怎么解决
    千次阅读
    2021-01-28 10:25:41

    问题

    在项目中遇到一个文件下载的问题,需求是点击按钮跳出下载框实现文件下载;

    尝试直接通过a标签的方式实现,发现excel文件可以直接下载,但是图片和pdf个事的文件则会自动打开预览,需要自己手动“另存为”下载;在a标签中加上download属性也不行;

    查阅发现 浏览器会对请求返回的内容进行默认处理,对于png pdf之类的内容,浏览器能处理的就会自动打开,而对于excel这类浏览器处理不了的才会进行下载;

    解决

    解决方案一:

    让后端给请求添加响应头:Content-Disposition: attachment;filename=“filename.jpg”

    Content-Disposition 响应头指明用户代理要怎么处理响应附加的文件,attachment 表示将附加的文件直接进行下载

    后端设置好响应头后 通过<a href="文件绝对路径"></a>的形式就可以实现下载

    由于我们项目接口给出的并不是具体文件的路径,所以通过方案二实现

    解决方案二:

    通过blob的形式实现下载

    • blob 表示二进制类型的大对象
    const test = () => {
      fetch('/server/public/Template/download', {
        headers: {
          Authorization: window.sessionStorage.token,
        },
      }).then((res) => { // res返回的是字节流
        res.blob().then((blob) => { // 使用blob()方法返回一个被解析为Blob格式的Promise对象
          const blobUrl = window.URL.createObjectURL(blob); // 使用URL.createObjectURL 生成一个blob协议的URL,大多数场景下可以将其当做http协议的url来使用
          let filename = ''; // 这里后端设置了content-disposition的响应头因此直接从这里拿文件名,通过其他方式传递文件名也可
          res.headers.forEach((val, key) => { // 读取响应头中传过来的文件名
            if (key === 'content-disposition') {
              filename = val.split('=')[1];
            }
          });
          const a = document.createElement('a'); // 创建一个a标签
          a.style.display = 'none';
          a.href = blobUrl;
          a.download = decodeURIComponent(filename); // 对编码后的 URI 进行解码
          document.body.appendChild(a);
          a.click();
          document.body.removeChild(a);
          window.URL.revokeObjectURL(blobUrl); // 当不结束使用某个 URL 对象之后,应该通过调用这个方法来让浏览器知道不用在内存中继续保留对这个文件的引用了
        });
      });
    };
    
    更多相关内容
  • 云计算架构-解决方案设计手册pdf下载,csdn.pdf云计算架构-解决方案设计手册pdf下载,csdn.pdf云计算架构-解决方案设计手册pdf下载,csdn.pdf云计算架构-解决方案设计手册pdf下载,csdn.pdf云计算架构-解决方案设计手册...
  • 麦肯锡问题分析与解决技巧 高清 电子书 pdf 下载 [(日)高杉尚孝著][][2014.06][237页
  • 解决预览pdf不下载的问题

    千次阅读 2020-12-17 16:08:12
    之后要在A系统预览并下载。 2.问题 1.文件名能回填 2.保存类型没有pdf 3.解决 /** * 实现资产系统通过接口方式 * PDF预览 * @author chenf */ @RequestMapping(value = "/sign-process/queryFile...

    1.背景

    最近在开发A系统归档的数据要传入B系统,在B系统生成PDF文件。之后要在A系统预览并下载。

    2.问题

    1.文件名不能回填

    2.保存类型没有pdf

    3.解决

     /**
         * 实现资产系统通过接口方式
         *                PDF预览
         * @author chenf
         */
        @RequestMapping(value = "/sign-process/queryFile", method = RequestMethod.GET)
        public RestfulResult queryFile(String assetUrl,
        		HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException 
        {   	
        	String param = assetUrl;
        	param = URLDecoder.decode(URLDecoder.decode(param, "utf-8"),"utf-8");
        	param = StringEscapeUtil.encode(param);
        	OutputStream out = null;
        	RestfulResult result = new RestfulResult();
        	try 
        	{
        		out = response.getOutputStream();
        		// 执行业务
        		this.signAssetservice.getAssetFile(request,response,param,out);
        		return null;
        	} catch (Exception e) 
        	{
        		log.setState("错误");
        		log.setDescribe(e.toString());
        		logManage.addLog(log);
        		result.setCode(RestfulResult.ERROR_CODE);
    			result.setMsg(log.getDescribe());
    			return result;
        	}finally 
        	{
    			try
    			{
    				if(out != null)
    				{
    					out.close();
    				}
    			} catch (IOException e)
    			{
    				e.printStackTrace();
    			}
        	}
        }
    	
    	
    	@Override
    	public void getAssetFile(HttpServletRequest request,HttpServletResponse response,String param,OutputStream out) {
    		FileInputStream in = null;
    		String fileurl = null;
    		fileurl = param;
    		
    		try {
    			File file = new File(fileurl);
    			String fileName = file.getName();
    			//中文兼容火狐浏览器
    			if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
    				downShowName = "=?UTF-8?B?"+(new String(Base64.encode(fileName.getBytes("UTF-8")))) + "?=";
    			} else {
    				downShowName = java.net.URLEncoder.encode(fileName,"UTF-8");
    			}
    			response.setContentType("application/pdf");//告诉浏览器输出内容为pdf
    			response.setHeader("Content-Disposition", "inline;filename="+downShowName);//inline显示|attachment下载
    			in = new FileInputStream(file);
    			byte[] date = new byte[in.available()];//获取文件的大小
    			in.read(date);//以字节流的形式读取文件
    			out.write(date);
    		}catch (Exception e) {
    			throw new RuntimeException(e.toString());
    		}finally {
    			if(in!=null){
    				try
    				{
    					in.close();
    				} catch (IOException e)
    				{
    					e.printStackTrace();
    				}
    			}
    		}
    	}

     

    展开全文
  • JS 实现web页面下载pdf文件,无需和后台交互,解决下载清晰度问题,解决分页问题;这次开发项目时,甲方服务器没有打印机,要求加的功能,自己费了很多时间收集资料研究,最后集成的代码;方便以后使用。希望对有...
  • 云计算架构-解决方案设计手册pdf下载,csdn.docx云计算架构-解决方案设计手册pdf下载,csdn.docx云计算架构-解决方案设计手册pdf下载,csdn.docx云计算架构-解决方案设计手册pdf下载,csdn.docx云计算架构-解决方案设计...
  • 解决pdf.js下载PDF文件名称中文乱码和带.pdf后缀名问题 其实正儿八经的说,PDF文件名称这不算是一个乱码问题。 为什么这么说呢,因为我们看到的文件名称中杂乱无章的编码其实就是js把中文进行了编码而已,和真正...

    解决pdf.js下载PDF文件名称中文乱码和不带.pdf后缀名问题

    其实正儿八经的说,PDF文件名称这不算是一个乱码问题。

    为什么这么说呢,因为我们看到的文件名称中杂乱无章的编码其实就是js把中文进行了编码而已,和真正的因为编码错误造成的乱码并不一样。

    【心急的同学可以直接翻到最下面看:- 解决方法-】

    我们看先错误出现的场景:

    • 我使用pdf.js预览了一个叫做02010204_钢筋安装检验批质量验收记录_02010204016.pdf的文件,然后我点击pdf工具栏的下载时,给我生成的文件名是这样的:
      在这里插入图片描述
    • 我们从这个生成的名称中,可以看出,文件名称中非中文的字符都是正常的,中文的字符是不正常的,我们要解决的就是这个问题。

    造成的原因:

    • 网上的方法我也看了很多,比较常见的就是把我们要预览的地址先进行编码,使用JavaScript的encodeURIComponent()方法,还有在html中引入viewer.js 的script里指定charset="gb2312"。这些方法我都试了一下,结论是:不适用我这个情况。【其实就是加没加没啥变化】

    • 不得已,翻了一下viewer.js关于下载这一部分的代码,还真让我发现了原因:
      在这里插入图片描述

      在这里,viewer.js已经帮我们对文件名称进行了编码,所以我下载时生成的文件名就是编码过后的。

    解决方法:

    • 知道了原因,那解决方法就不难想了,对文件名进行解码,使用JavaScript的decodeURIComponent()方法。

    • 找到viewer.js中的_download()方法
      在这里插入图片描述
      把我红框框柱的代码替换成下面的代码即可:

      a.download = decodeURIComponent(filename);
      

    最终效果:

    • 至此,就搞定了,说了这么多其实就是换一行代码的事情,其实主要还是让大家了解一下寻找问题的过程,思想很重啊哟,哈哈。【附:效果图】。
      在这里插入图片描述

    在这里说一下.pdf后缀的问题:

    有些时候我们下载pdf进入到上图(最终效果图)界面后会碰到文件名的后缀没有带 .pdf 的,这种情况下载下来的是pdf文件,但是没有后缀名,而且下载下来因为没有后缀名有时候没法直接打开,需要手动的加上.pdf后缀名。

    要解决这个问题也很简单,还是从download的时候的文件名入手:

    // 判断文件名是否以.pdf文件
    if(decodeURIComponent(filename).endsWith('.pdf')){
      a.download = decodeURIComponent(filename);
    } else {
      a.download = decodeURIComponent(filename) + '.pdf'
    }
    

    只需要判断一下,如果没有.pdf后缀,如果在下载还是没有,那么接着往下看:

    到这里其实细心的同志已经发现了,这一段代码里有a.href a.target a.download,这就是赤裸裸的给a标签加属性的啊,既然是a标签,那我们还可以给指定一下MIME类型。

    所以在判断文件是不是以.pdf结尾之前,我们还可以指定type:

    a.type = "application/pdf";
    

    到这里,你下载文件的时候,文件名的地方应该就会给你带上.pdf了,如果还不带.pdf后缀,那么请看一下:你的电脑是不是隐藏了文件的扩展名

    注意:我也不能保证此方法就一定可以解决你的问题。毕竟出现问题的情况千变万化。这里只是给大家提供一种方法尝试。

    展开全文
  • Python解决下载pdf问题bug

    千次阅读 2019-11-07 13:11:54
    1、BUG问题:requests返回的二进制结果resp.content=b’ '为空,无法下载pdf 2、产生原因: response.close()方法会调用HttpWorkerRequest.CloseConnection()方法。终止(Terminate)与客户端的套接字连接,并使得...

    代码如下:

    • 1、BUG问题:requests返回的二进制结果resp.content=b’ '为空,无法下载pdf
    • 2、产生原因: response.close()方法会调用HttpWorkerRequest.CloseConnection()方法。终止(Terminate)与客户端的套接字连接,并使得服务器,客户端以及之间设施上的缓存(buffer)失效。导致发送到客户端的数据丢失。如果还未存数据就关闭连接,易造成数据丢失。
      在这里插入图片描述
    • 3、解决方法:response.close()关闭提后或者不使用
    def get_proxies():
        proxy = {}
        return proxy
    
    def pdf_url_requests(pdf_url):
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
            "Accept-Encoding": "gzip, deflate, br",
            "Accept-Language": "zh-CN,zh;q=0.9",
        }
        for i in range(4):
            try:
                resp = requests.get(pdf_url, headers=headers, proxies=proxy, stream=True, timeout=20)
                resp.encoding = "utf-8"
            except socket.error as err:
                logging.warning(f"{pdf_url} : this website may socket timeout, sleep 1s and try again : {err} ")
                time.sleep(random.uniform(0.5, 1.5))
                proxy = get_proxies()
            except Exception as _e:
                time.sleep(random.uniform(0.5, 1.5))
                logging.exception(f'{pdf_url} :Exception error happened in methods_get_requests :{_e}')
                proxy = get_proxies()
            else:
                if not resp:
                    continue
                return resp
    
    def download_pdf(pdf_url, pdf_name):
        r = pdf_url_requests(pdf_url)
        pdf_path = f"{E:/pdf/AuditReport/{pdf_name}"
        with open(pdf_path, 'wb') as f:
            for content in r.iter_content(chunk_size=512):
                if content:
                    f.write(content)
        r.close()
    
    展开全文
  • 前言: 在我们项目中,下载png,jpg的文件是非常方便的,动态生成一个a标签,给他赋值路径,动态点击,就可以实现这个功能,但是pdf...二、下载pdf的方法() ***在说具体方法之前,先解决一个问题,就是使用下面...
  • @ 关于如何解决mac电脑下载pdf之后出现名称乱码的解决方法。 首先说呢,由于工作变更及工作需要,所以入手了一个mac电脑。但是入手之后就逐渐被
  • 纯前端下载pdf链接文件,而不是打开预览的解决方案
  • 今天,从OA上看到一个发布公告的pdf文件打开后能正常显示,一开始以为是我自己电脑的问题,后来其他人也反映也有这个问题,那我们就一块来看一下到达是哪里出了问题。 下载后的文件打开是这样的 对于正式文件...
  • pdf不能复制粘贴的解决方法

    千次阅读 2021-12-09 09:17:31
    我们可以用奥凯丰 PDF解密大师来解决PDF文件能复制粘贴的问题。 【PDF解密大师】密码找回_破解_移除_设置-奥凯丰okfone 打开软件,选择【解除限制】将PDF文件添加到软件中,点击【开始】即可快速解决 ...
  • PDF 下载方法一 这个方法是通过调用服务,服务端给前端返回pdf文件流(不是字节流)。在用blob下载。貌似所有方法都是文件流下载的吧。 // 后端服务地址方法 api(id).then(res => { let blob = new Blob(...
  • 最近有一朋友,现在某机关工作,结果电脑却下载PDF文件,遂咨询我,后来登录上去后发现,下载PDF需要用Adobe PDF Reader 的插件支持,且只能使用IE浏览器(非Edge),他们公司普遍用的IE11. 网上搜索了以下总结了解决方案...
  • 如何解决谷歌浏览器下载图片、PDF文档时只打开不下载的问题?如何变成直接下载解决方法: 使用js获取下载流,重新生成本地下载链接,再触发下载事件,代码如下: function getFile(url,fileName){ var ...
  • PDF文件在文件夹里只显示图标,显示缩略图。但是把PDF文件放进回收站里之后,竟然会显示缩略图。然后将回收站内的PDF文件恢复到外面后,缩略图会继续存在。 尝试了网上能搜到的各种方法:比如常规的配置,修改...
  • 否则可能会出现如下问题 500 : Internal Server Error nbconvert failed: Pandoc wasn’t found. …… 500 : Internal Server Error ...**问题:**完成上一步之后,发现中文并能显示。网上有许多教...
  • 安卓手机打pdf文件怎么解决

    千次阅读 2021-06-04 12:59:34
    原标题:安卓手机打pdf文件怎么解决?Office应该大部分人都认识,普通办公人群基本每天都会使用到。我们在手机上经常会遇到这样一种情况!对方发过来一个格式为PDF的文件,但是手机上不管使用哪一款应用都无法...
  • pdf2Image.dll如何修复?pdf2Image.dll是电脑内十分重要的文件,它的丢失易导致游戏、应用软件等程序运行出现错误,致使程序无法正常运行,它的解决办法也是非常简单的,只要下载好pdf2...1、从本站下载pdf2image.d
  • 使用Google Chrome浏览器,在点击网页中的pdf文件时,浏览器会直接将pdf文件打开并显示,要下载pdf文件的话,还需要进行另存操作。 有的时候我们点击pdf文件就是为了直接下载,而不是为了在浏览器中查看pdf文件。...
  • 实现Vue导出页面为PDF格式【笔记】 首先需要安装两个工具: npm install --save html2canvas npm install jspdf --save 创建htmlToPdf.js 文件,个人习惯放在plugins文件夹中,具体代码如下: // 导出页面为PDF...
  • 微信扫码下载APP,苹果,安卓多码合一,微信下载pdf报告,文件
  • Zotero 知网文章抓取pdf
  • react 解决post请求的下载pdf问题

    千次阅读 2018-09-18 15:05:41
    react处理post请求的下载pdf功能 完整代码: //下载 Down=(index)=&gt;{ this.setState({ visible: true, }); console.log(index.pdfPath); const THIS=this; axios.post(...
  • 知网下载PDF?CAJ格式太鸡肋?

    万次阅读 2020-02-25 09:49:31
    个人在下载文献时,一般喜欢.pdf格式的文件,并是说CAJ格式不好,它也是有优点的,一是支持所有pdf中能完成的操作;二是CAJ格式是默认带大纲链接的,这方便了文献的阅读和快速的定位,而pdf格式的文献一定有。...
  • 有时候在谷歌可以正常下载word和pdf文件,但在ie浏览器就不行了,这是由于IE浏览器安全策略所限导致(其实只要让IE能够支持Blob就可以了) 如果在IE浏览器下就用如下代码(判断的方法不止这一种啊): if (window....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,071
精华内容 45,628
关键字:

下载不了pdf怎么解决