无法获取下载文件名的无奈之举

最近,领导又让我发挥余热,开发些网页操作工具。其中涉及到需要下载文件,以前也研究过webbrower截获下载并接管下载,不过太麻烦了,而且我只是针对特定网页拦截下载,重新刮资料,从这里(使用没有 url 的 WebBrowser 自动下载文件)获得启发:

--------------------------------------------------------------------------------------------------------------------------

我认为你甚至应该阻止下载对话框的显示。 这可能是一种方法:

  • Javascript 代码使您的 WebBrowser 控件导航到特定的 Url(这会导致下载对话框出现)

  • 为了防止 WebBrowser 控件实际导航到此 Url,请将事件处理程序附加到导航事件。

  • 在您的导航事件中,您必须分析这是否是您想要停止的实际导航操作(这是下载 URL,也许检查文件扩展名,必须有可识别的格式)。 使用 WebBrowserNavigatingEventArgs.Url 来执行此操作。

  • 如果这是正确的 Url,请通过设置 WebBrowserNavigatingEventArgs.Cancel 属性停止导航。

  • 使用 HttpWebRequest 或 WebClient 类继续自行下载

查看此页面以获取有关该事件的更多信息:
http://msdn.microsoft.com/en -us/library/system.windows.forms.webbrowser.navigating.aspx

=========================================================================

实现了拦截下载触发并获得了下载url,通过url及Webclient就可以下载文件了,但无法通过ResponseHeaders获取下载文件名,原因是无法获取响应标头Content-Disposition,相关的原因是

------------------------------------------------------------------------------------------------------------------------------

Access-Control-Expose-Headers

响应标头 Access-Control-Expose-Headers 允许服务器指示那些响应标头可以暴露给浏览器中运行的脚本,以响应跨源请求。

默认情况下,仅暴露 CORS 安全列表的响应标头 (en-US)。如果想要让客户端可以访问到其他的标头,服务器必须将它们在 Access-Control-Expose-Headers 里面列出来。

CORS-safelisted response header

CORS-safelisted response header is an HTTP header in a CORS response that it is considered safe to expose to client scripts. Only safelisted response headers are made available to web pages.

By default, the safelist includes the following response headers:

  • Cache-Control
  • Content-Language
  • Content-Length
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma

 =========================================================================

无奈的解决办法:文件名随便定了,关键是文件后缀(也就是文件类型),这涉及到文件的打开方式,可以通过Content-Type获取文件类型,下载完成后修改文件的后缀即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/116355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

根据Lambda表达式获取实体字段

代码 package com.shunneng.platform.web.rest.util;import javax.persistence.Column; import java.io.Serializable; import java.lang.invoke.SerializedLambda; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.r…

怎么下载微信视频号视频?

你是否曾经在浏览视频号时看到了一些精彩的视频号,希望能够保存下来,但却不知道如何下载?别担心!本篇文章将为你介绍一个方便易用的视频号下载工具,让你轻松保存喜欢的视频号视频!犀牛下载是一款专门为微信…

05 | 类型匹配:怎么切除臃肿的强制转换

Java 的模式匹配是一个新型的、而且还在持续快速演进的领域。类型匹配是模式匹配的一个规范。类型匹配这个特性,首先在 JDK 14 中以预览版的形式发布。在 JDK 15 中,改进的类型匹配再次以预览版的形式发布。最后,类型匹配在 JDK 16 正式发布。…

电子画册如何制作,教你几分钟简单上手制作?

电子画册不同于纸质画册,它可以不受时间、空间及地域的限制,以更直观、新颖的形式展示在读者面前,还能快速传播效益。所以,当下,越来越多人想要用电子画册来传递内容信息。 如何制作电子画册?其实只要使用…

Python 框架学习 Django篇 (五) Session与Token认证

我们前面经过数据库的学习已经基本了解了怎么接受前端发过来的请求,并处理后返回数据实现了一个基本的登录登出效果,但是存在一个问题,我们是将所有的请求都直接处理了,并没有去检查是否为已经登录的管理员发送的,如果…

Kotlin Lambda表达式与标准库中的高阶函数

在Kotlin中,Lambda表达式和标准库中的高阶函数为我们提供了一种简洁而强大的方式来处理集合和执行各种操作。本篇博客将介绍Lambda表达式的基本概念,并结合标准库中的高阶函数示例,展示它们的用法和功能。 Lambda表达式的基本概念 Lambda表…

WebAPI项目在Linux服务器上部署记录

对已有的WebAPI项目进行发布 发布流程 需要把publish的文件夹直接上传至linux服务器 在Linux服务器上部署环境 检查是否安装了dotnet环境 直接命令行输入 dontnet,如果弹出的是下面的语句,说明没有安装dotnet环境 -bash: dotnet:command not found…

React 框架

1、React 框架简介 1.1、介绍 CS 与 BS结合:像 React,Vue 此类框架,转移了部分服务器的功能到客户端。将CS 和 BS 加以结合。客户端只用请求一次服务器,服务器就将所有js代码返回给客户端,所有交互类操作都不再依赖服…

点云从入门到精通技术详解100篇-双目鱼眼系统的畸变校正及目标重建(续)

目录 3.3双目鱼眼系统标定 3.4基于光束平差法的标定结果优化 3.5标定实验结果与分析

elementUI 中 date-picker 的使用的坑(vue3)

目录 1. 英文显示2. format 与 value-format 无效3. date-picker 时间范围4. 小结 1. 英文显示 <el-date-pickerv-model"dateValue"type"date"placeholder"选择日期"></el-date-picker>解决方案&#xff1a; 引用 zhCn <script&g…

ARM CoreSight相关模块简介

最近在学习ARM CPU软硬件开发&#xff0c;对于CoreSight看到很多模块&#xff0c;简单总结了下。 1. DAP ARM DAP (Debug Access Port) 的主要作用是为调试工具提供直接访问 ARM 处理器和其它相关硬件的途径。DAP 是 ARM CoreSight 调试和追踪技术的一部分&#xff0c;它允许…

短视频矩阵系统源码/技术应用搭建

短视频矩阵系统开发围绕的开发核心维度&#xff1a; 1. 多账号原理开发维度 适用于多平台多账号管理&#xff0c;支持不同类型账号矩阵通过工具实现统一便捷式管理。&#xff08;企业号&#xff0c;员工号&#xff0c;个人号&#xff09; 2. 账号矩阵内容开发维护 利用账号矩…

C#调用C/C++从零深入讲解

C#调用非托管DLL从零深入讲解 一、结构对齐 结构对齐是C#调用非托管DLL的必备知识。 在没有#pragma pack声明下结构体内存对齐的规则为: 第一个成员的偏移量为0,每个成员的首地址为自身大小的整数倍子结构体的第一个成员偏移量应当是子结构体最大成员的整数倍结构体总大小…

Qt和Python结合开发Android应用

在移动应用开发领域,Android平台一直以来都备受开发者们的喜爱。然而,Android应用的开发通常需要使用Java或Kotlin等编程语言。但如果你是一位熟悉Qt和Python的开发者,你也可以借助这些工具来构建出色的Android应用。本文将介绍如何使用Qt调用Python来开发Android应用,以及…

使用Spyder进行动态网页爬取:实战指南

导语 知乎数据的攀爬价值在于获取用户观点、知识和需求&#xff0c;进行市场调查、用户画像分析&#xff0c;以及发现热门话题和可能的新兴领域。同时&#xff0c;知乎上的问题并回答也是宝贵的学习资源&#xff0c;用于知识图谱构建和自然语言处理研究。爬取知乎数据为决策和…

探索现代IT岗位:职业机遇的海洋

目录 1 引言2 传统软件开发3 数据分析与人工智能4 网络与系统管理5 信息安全6 新兴技术领域 1 引言 随着现代科技的迅猛发展&#xff0c;信息技术&#xff08;IT&#xff09;行业已经成为了全球经济的关键引擎&#xff0c;改变了我们的生活方式、商业模式和社会互动方式。IT行…

【C++和数据结构】模拟实现哈希表和unordered_set与unordered_map

目录 一、哈希的概念与方法 1、哈希概念 2、常用的两个哈希函数 二、闭散列的实现 1、基本结构&#xff1a; 2、两种增容思路 和 插入 闭散列的增容&#xff1a; 哈希表的插入&#xff1a; 3、查找 4、删除 三、开散列的实现 1、基本结构 2、仿函数Hash 3、迭代器…

React 中 keys 的作用是什么?

目录 前言&#xff1a;React 中的 Keys 的重要性 为什么 Keys 重要&#xff1f; 详解&#xff1a;key 属性的基本概念 用法&#xff1a;key 属性的示例 解析&#xff1a;key 属性的优势和局限性 优势&#xff1a; 局限性&#xff1a; key 属性的最佳实践 稳定的唯一标…

代码随想录二刷 Day46

10背包&#xff1a; 二维内侧与外侧都是正序遍历&#xff0c;二维的内侧与外侧是背包还是物品无所谓&#xff1b; 10背包&#xff1a; 一维外侧是正序&#xff0c;内侧是倒序&#xff1b; 目的是为了一个物品只选取一次&#xff1b;一维内侧一定要是背包&#xff1b;原因我想了…

SQL关于日期的计算合集

前言 在SQL Server中&#xff0c;时间和日期是常见的数据类型&#xff0c;也是数据处理中重要的一部分。SQL Server提供了许多内置函数&#xff0c;用于处理时间和日期数据类型。这些函数可以帮助我们执行各种常见的任务&#xff0c;例如从日期中提取特定的部分&#xff0c;计…