HTTP文件下载

QT中使用Http下载文件夹下的所有文件 QT中基于HTTP协议的网络文件下载是无法像FTP一样直接拉取文件夹下所有文件的列表的,但是由于我的项目中是给了我一个保存所有文件的QStringList,因此我们也可做到下载文件夹中的所有文件(必须要获取到所有文件的列表才能使用Http下载),不多说上代码。 #ifndef DOWNLOADTHREAD_H #define DOWNLOADTHREAD_H #include <Q... 阅读详情

1. 简介

前后端版本下载的主要区别?

  • 后端版本:浏览器直接访问下载链接,服务器响应头包含Content-Type: application/octet-stream,浏览器自动弹出下载框。
  • 前端版本:前端JS使用Ajax发起请求获取数据,完成过后通过JS生成下载对象在由JS触发下载,浏览器自动弹出下载框。

为什么需要前端版本的下载?
在前后端分离情况下,前端与后端都是通过JSON类型数据,固定的响应格式进行通信(如:{"code": 0, "msg": "success", "data": null}),其中code是状态码,data是前端需要的数据。

后端实现(浏览器直接访问)的缺点?:

  1. 请求添加令牌难以统一:正常前后端分离我们的令牌不是放到Cookie中保存,而是通过JS拦截器每次请求发出前添加令牌,而浏览器直接发起的请求我们添加令牌就很麻烦。
  2. 响应接口参数难以统一:如果由后端来完成下载任务,前后端就无法维持响应接口的统一(正常请求是这样:"code": 0, "msg": "success", "data": null},但碰到下载文件响应确是直接文件)。

2. 后端版本

注意

  1. 后端版本的文件下载不能是由Ajax发起。

2.1. 浏览器直接下载

请求

GET /example.txt HTTP/1.1
Host: 192.168.2.91:8080
Accept-Encoding: gzip, deflate
Connection: keep-alive

响应

浏览器会自己跳下载框。

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Date: Sat, 06 Apr 2024 01:43:31 GMT
Content-Length: 3

abc

2.2. JS触发下载

通信流程同上,流程也和上面一样,只不过一个是由人手动触发JS,一个是由JS触发JS,本质都是后端实现的文件下载。

let a = document.createElement("a");
a.setAttribute("href", "/example.txt");
a.click();

3. 前端版本

前端版本实际是从API角度考虑,后台只提供统一的API接口不考虑文件下载。前端如果需要下载自己找后台请求数据,格式化数据生成下载内容。

3.1. JS

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>File Download</title>
</head>
<body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
<button id="download">开始下载</button>
<script>
    window.onload = () => {
        const btn = document.querySelector('#download');
        btn.onclick = () => {
            $.get('http://ipinfo.cloudbypass.com', (data) => {
                const blob = new Blob([JSON.stringify(data)]);
                const filename = 'address.json';
                const downloadUrl = window.URL.createObjectURL(blob);
                
                const a = document.createElement('a');
                a.style.display = 'none';
                a.href = downloadUrl;
                a.download = filename;
                a.click();
            });
        };
    }
</script>
</body>
</html>

3.2. Axios

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>File Download</title>
</head>
<body>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/1.5.0/axios.js"></script>
<button id="download">开始下载</button>
<script>
    window.onload = () => {
        const btn = document.querySelector('#download');
        btn.onclick = () => {
            axios({
                method: 'get',
                url: 'http://ipinfo.cloudbypass.com',
                responseType: 'blob'
            }).then((res) => {
                const filename = 'address.json';
                const downloadUrl = window.URL.createObjectURL(res.data);
                const a = document.createElement('a');
                a.style.display = 'none';
                a.href = downloadUrl;
                a.download = filename;
                a.click();
            });
        };
    }
</script>
</body>
</html>

4. 参考

Qt Http文件下载功能实现 Qt Http下载文件 阅读详情

相关推荐

Java使用socket通过http下载文件

目录前言socket套接字http协议正文http请求头:向服务器请求文件http请求头:分析服务器回传的头的信息例子:服务器回传的http头部信息:通过http下载文件的几个步骤注意事项:代码执行结果 前言 因为有一门课的实验要用到这个,而老师不让用URL对象,只能用socket,网上关于socket下载的资料少之又少,故总结之 socket套接字 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中

AKGWSB 's blog 2299

http 协议大文件下载

响应的正文只能通过http响应消息进行传输,如果是小文件(比如小于1M)传输,则没有什么问题,直接把文件内容加载到正文进行回应即可,但如果是大文件(比如大于10M),不可能把文件内容加载到正文吧,如果更大的文件呢,100M?下载一个 19 M 的文件是可以成功的,再大的文件没有试,因为下载速度有点慢。那下载下来的文件是否有异常呢?windows上下载的,所以把这个文件拷贝到 CentOS 服务上看一下了,这两个文件经过 md5sum 后值是一样的,那我们下载的文件就是正常的。那用c++代码怎么写呢?....

tianyexing2008的博客 5618

MFC实现HTTP文件下载指南

MFC(Microsoft Foundation Classes)是一个用于简化Windows应用程序开发的C++库。它提供了一组封装了Windows API的类,这些类使得创建用户界面、处理输入输出以及管理应用程序资源变得更加容易。MFC被设计为一个对象框架,允许开发者利用面向对象的方法来构建应用程序。

weixin_28999139的博客 1162

实现HTTP下载的几种方式

我们在Internet上浏览网页时,经常会下载需要的文件,有些是FTP方式的下载,多数则是基于HTTP协议的文件下载,实质就是通过HTTP协议传输流数据。HTTP协议传输的是MIME格式的数据,MIME定义于几个RFC的协议里,MIME的类型里有流数据相关的类型,关于MIME更多信息参考相关资料。HTTP下载从技术上来说有两种实现方式,1. 直接链接到需要下载的文件蔡依林 - 城堡这种方式使用简单

Rain's IT Life 1万+

HTTP下载工具

基于HTTP协议,来进行文件下载,可以下载word,pdf,jpg,exe,rar,zip。MP4,MP3等格式的文件。有进度条显示,选择文件下载路径,计算文件大小和下载时间的功能。

C# 【WebService编写调用】

😹 觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!!

只有登上山顶,才能看到那边的风光 1173

HTTP请求以及文件下载

HttpListener 是 .NET Framework 提供的用于创建 HTTP 服务器以侦听传入 HTTP请求的类。用法:HttpClientHttpClient 是 .NET Framework 提供的用于发送 HTTP 请求的类。它可以用于向服务器发送 GET、POST等类型的请求,并处理服务器的响应。

m0_52550458的博客 3488

Ubuntu系统下USB无线网卡无法识别的解决方案

Realtek的USB设备可能是无线网卡、有线网卡、读卡器等,系统仅知道“这是Realtek的USB设备”,但不知道“如何将其作为无线网卡驱动”。通过以上步骤,RTL8812AU 芯片的 Edimax 无线网卡应能被 Ubuntu 识别并正常工作。Realtek等品牌的无线网卡可能被系统简单识别为"USB设备",但未匹配到对应的无线驱动,导致设备无法发挥网络功能。是系统识别了USB设备,却未正确加载无线网卡驱动。(前4位是厂商ID,后4位是产品ID),显示设备已识别,但网络管理工具无反应,

极地星辰 3459

http协议及基于http协议的文件下载

目录 1. HTTP 协议概述 2. URL 与资源 3. HTTP报文 4. 使用Postman 获取数据 5. 基于HTTP协议的文件下载 5.1 文件整体下载 5.2 文件分段(Range)下载 5.2.1 获取文件的大小 5.2.2 下载分段文件 5.3 文件分块(chunk)下载 1. HTTP 协议概述 日常我们使用网络用得最多的无疑是在Web 浏览器(下文统...

Xanthium 2万+

常见的AXI总线仲裁器概述-AXI协议理解(一)

SoC 设计广泛采用共享总线式的片上通信,其中的仲裁器是共享总线的关键技术之一。AMBA AXI 总线协议以高性能、高频率的系统设计为目标,适合高带宽、低延迟的系统设计,可以达到高频率的操作而不需要复杂的总线桥,满足众多部件的接口要求,具备高度灵活的互联结构,并且向后兼容 AHB 和 APB 接口。

Paul 安的博客 1万+

LabVIEW与VisionMaster融合开发:从封装避坑到高效集成的实战指南

本文为LabVIEW开发者提供了一套与海康VisionMaster融合开发的实战指南。针对直接调用SDK时遇到的程序集加载失败和面向对象编程冲突等核心障碍,文章详细介绍了通过C#进行“浅封装”的解决方案,包括封装显示控件和核心功能类,并给出了在LabVIEW中高效集成、调用及资源管理的最佳实践,旨在帮助开发者稳定、高效地集成机器视觉功能。

weixin_29210727的博客 153

QT之HTTP下载文件

在Qt网络应用程序开发中,HTTP文件下载是一项常见的任务。通过HTTP协议,我们可以从服务器下载各种类型的文件,包括文本、图像、视频等。

weixin_62370184的博客 3930

【Qualcomm高通音频】外部Codec调试流程_ES7243E

一、 调试大纲 调试正式开始之前,想办法获取以下信息:硬件设计原理图/Codec参考驱动代码/FAE联系方式。 1. 从硬件设计原理图,我们要获取到Codec芯片和CPU通过什么接口连接,包括数据传输接口、控制接口、reset和power引脚。 2. Codec参考驱动代码,一般正规的厂商都会提供的,至少也提供对应场景的寄存器配置。 接下来开始正式调试,大致分为以下流程: a. 数据...

crow_ch的博客 8264

Http方式下载文件

/// <summary> /// Http方式下载文件 /// </summary> /// <param name="url">http地址</param> /// <param name="localfile">本地文件</param> /// <returns>...

qq_39559182的博客 2684

吃透 AM32 无人机电调:从源码架构到工作原理的全方位解析(附实践指南)(上)

本文深入解析了AM32电调固件的源码架构与核心模块实现。文章首先介绍了AM32电调作为开源无人机;动力心脏的重要地位,随后从硬件基础、源码目录、模块划分三个维度构建解析框架。重点剖析了系统初始化模块的时钟配置、GPIO初始化和定时器设置,以及FOC控制模块的坐标变换算法、角度估算和SVPWM生成等关键技术实现。通过逐行代码解析,揭示了电调如何将飞控指令转换为电机驱动的完整过程,为开发者理解AM32电调工作原理提供了系统性指导。

bother3000的博客 6554

使用pdfBox实现pdf转图片出现中文方块乱码 简单修改源码解决

参考文章 问题排查:使用pdfbox将pdf转image时STSong-Light字体中文乱码 pdfbox版本是2.0 日志中打印出类似这样的日志(例:Using fallback XXX for CID-keyed font STSong-Light),就说明系统没有安装STSong-Light字体,pdfbox使用XXX字体来替代了。如果出现方块,就说明没有这种字体,并且替代字体也没有,日志也有相应的其他提示。 正常操作就是安装缺失的 STSong-Light 字体,但是在网上搜到的都是 STSong

aji_csdn的博客 5266

http/https下载文件

//https下载 fileUrl文件路径 fileLocal本地路径 public static void downloadFile(String fileUrl, String fileLocal, HttpServletResponse resp){ HttpsURLConnection urlCon = null; try { SSLContext sslcontext = SSLContext.getInstance("SSL", "SunJ

weixin_39766068的博客 6013

【施磊】C++课程笔记目录

【C++编程】施磊老师C++笔记目录

GeniusAng的博客 4122

Java下载http文件

使用org.apache.commons.io包中的FileUtils工具类实现: /** * 下载http文件 * * @param url 文件地址 * @param dir 存储目录 * @param fileName 存储文件名 * @return 下载后的文件存储路径 */ pub...

依凡的博客 3673

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java http 下载_HTTP文件下载JAVA后台的实现

HTTP文件的下载后台JAVA代码1、使用org.apache.http.impl.client.CloseableHttpClient先上代码:public String downloadFile(String src_file, String dest_file) throwsThrowable {String fileName=getFileName(src_file);try (Close...

weixin_29438011的博客 875

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java http大文件下载_Java实现HTTP文件下载

5. 代码清单import java.io.*;import java.net.*;import java.util.*;/*** <p>Description: 将指定的HTTP网络资源在本地以文件形式存放</p>**/public class SaveFile {public final static boolean DEBUG = true; //调试用private static int ...

weixin_32637935的博客 764

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

基于http协议的网络文件下载原理

基于HTTP的协议的网络文件下载,工作原理建立在请求/响应模式(Request/Response)上:一个客户端与服务器建立连接后,客户端向Web服务器发出一个HTTP请求行;Web服务器在收到有效的请求后,返回一个状态行或多个响应标题、一个空白行和相关文档。HTTP协议使用的端口号,通常为80。开发基于http协议的网络文件下载必须掌握HTTP协议,包括向服务器发送请求和获取服务器响应状

lanqiujiaolian的专栏 5847

python实现http下载文件-Python实现http文件下载

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家,也给大家做个参考。def DownloadFile(url,savePath):"""| ##@函数目的: 下载文件| ##@参数说明:url:文件的url路径| ##@参数说明:savePath:文件保存到的位置| ##@返回值:"""try:url...

weixin_37988176的博客 2382

java http get请求下载文件_java通过http方式下载文件

packagecom.qiyi;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.URL;importjava.net.URLConnection;importjava.util.List;im...

weixin_30129661的博客 2337

http大文件下载

1、最常用的下载方式是找到文件下载路径, 直接下载了, 这种直接形式从硬盘下载文件,大文件下载速度比较慢。 2、利用HTTP输出二进制流实现下载文件,速度是够快,不过同样缺陷在于下载大文件时,因为需要一次性的根据文件大小来分配相应的内存,如果文件超大, 内存空间不够。 3、利用HTTP分块下载,即不一次性分配存放下载文件的内存,而采用一次只分配10M或者其他值的内存,然后这样来实现分块

yanqzhi的博客 1万+

文件下载原理详解 http协议

<br />最终编辑 lin_chaoqi于HTTP协议,向服务器请求某个文件时,只要发送类似如下的请求即可: <br />     GET /Path/FileName HTTP/1.0<br />Host: www.server.com:80<br />Accept: */*<br />User-Agent: GeneralDownloadApplication<br />Connection: close<br />     每行用一个“回车换行”分隔,末尾再追加一个“回车换行”作为整个请求的结束。

因为了解所以无知 2万+
上一篇: Debian时间和时区配置
下一篇: Ubuntu Updates for this repository will not be applied
yimtcode
博客等级 码龄6年 205粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yimtcode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值