【Tauri2】049——upload

article/2025/8/11 7:34:38

前言

这篇就看看一个简单地插件——upload

Upload | Taurihttps://tauri.app/plugin/upload/upload的英文意思是“上传(程序或信息)”。

看来是用来上传文件的。

支持移动端

正文

安装

pnpm tauri add upload

在前后端都会安装,即

        .plugin(tauri_plugin_upload::init())
    "@tauri-apps/plugin-upload": "~2.2.1",

 看看通信函数

        .invoke_handler(tauri::generate_handler![download, upload])

一个是download,一个是upload。

看看其中的download的函数签名

#[command]
async fn download(url: &str,file_path: &str,headers: HashMap<String, String>,body: Option<String>,on_progress: Channel<ProgressPayload>,
) -> Result<()> 
  1. url:需要下载的网址
  2. file_path:保存的路径
  3. headers:请求头
  4. body:请求体
  5. on_progress:是一个Channel,其中类型是ProgressPayload

 其中这个ProgressPayload是什么东西?

#[derive(Clone, Serialize)]
#[serde(rename_all = "camelCase")]
struct ProgressPayload {progress: u64,progress_total: u64,total: u64,transfer_speed: u64,
}

实现了Clone、Serialize。

从其中的英文意思,可以简单地发现——用于封装下载进度信息(当前进度、总大小、传输速度等)。

总体看来,这个download函数意思就是下载文件的,封装了reqwest

http插件大同小异,只是更具体了。

看看upload函数

#[command]
async fn upload(url: &str,file_path: &str,headers: HashMap<String, String>,on_progress: Channel<ProgressPayload>,
) -> Result<String> 

和download差不多。

这两个函数,一个下载,一个上传。

本质就是发送一个请求。

笔者发现好像不能在Rust中使用。就在前端使用

download

下载,可以下载图片,也可以下载文件。笔者找了一个文件

笔者先下个图片试试,图片的地址如下

OIP.cIGsR32hEtqHtejFiRP2jAHaHa (474×474)https://th.bing.com/th/id/OIP.cIGsR32hEtqHtejFiRP2jAHaHa?rs=1&pid=ImgDetMain前端代码如下

    async function clicked() {let imageUrl="https://th.bing.com/th/id/OIP.cIGsR32hEtqHtejFiRP2jAHaHa?rs=1&pid=ImgDetMain"let filepath="C:\\Users\\26644\\Downloads\\tt.jpg"let headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}await download(imageUrl,filepath,({progress, total}) =>console.log(`Downloaded ${progress} of ${total} bytes`),headers)}

然而,笔者运行的时候报错了 

"error sending request for url (https://th.bing.com/th/id/OIP.cIGsR32hEtqHtejFiRP2jAHaHa?rs=1&pid=ImgDetMain)"

说实话,笔者不是很理解,这都能报错,就是发送一个请求。

然后,笔者打断点,发现在download这个通信函数中

下面代码

    let response = request.send().await?;

每次运行到这一步就会直接打包。

笔者也没找到解决办法。笔者搜了搜。

还是不行。

笔者发现这个插件的features有三个选项

都是tls

TLS 是用于网络通信加密的协议,确保数据安全、完整和身份验证,广泛用于 HTTPS 请求。

因此,看来问题就在这里。

  • native-tls 使用系统 TLS 库,依赖环境。
  • native-tls-vendored 使用内置 OpenSSL,跨平台一致。
  • rustls-tls 使用纯 Rust 的 rustls,内存安全但兼容性可能稍差。

 因此,笔者使用native-tls-vendored,即

tauri-plugin-upload = { version = "2.2.1", features = ["native-tls-vendored"] }

 结果如下

笔者使用其他也可以的。

再比如,下载yakit。

yaklang/yakit: Cyber Security ALL-IN-ONE Platformhttps://github.com/yaklang/yakit其下载的地址

https://github.com/yaklang/yakit/releases/download/v1.4.1-0530/Yakit-1.4.1-0530-windows-amd64.exehttps://github.com/yaklang/yakit/releases/download/v1.4.1-0530/Yakit-1.4.1-0530-windows-amd64.exe结果如下

有点慢,没问题

这里感觉可以可视化。添加进度条。

搞个进度条,结果如下

import {useState} from 'react';
import {download} from '@tauri-apps/plugin-upload';
import './Home.css';export default function Home() {const [progress, setProgress] = useState(0);const [progressText, setProgressText] = useState('0 / 0 bytes');const [isDownloading, setIsDownloading] = useState(false);const clicked = async () => {setIsDownloading(true);setProgress(0);setProgressText('0 / 0 bytes');const url = 'https://github.com/yaklang/yakit/releases/download/v1.4.1-0530/Yakit-1.4.1-0530-windows-amd64.exe';const filePath = 'C:\\Users\\26644\\Downloads\\yakit.exe';const headers = new Map<string, string>([['User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'],]);try {await download(url,filePath,({progressTotal, total}) => {let percentage = (progressTotal / total) * 100setProgress(percentage);setProgressText(`${progressTotal} / ${total} bytes`);},headers);setProgress(100);setProgressText('下载完成!');} catch (error:{ message?: string } | any) {console.error('下载失败:', JSON.stringify(error, null, 2));setProgressText(`下载失败: ${error.message || error}`);} finally {setIsDownloading(false);}};return (<div className="container"><h2>文件下载</h2><button onClick={clicked} disabled={isDownloading}>{isDownloading ? '下载中...' : '开始下载'}</button><div className="progress-container"><progress value={progress} max="100"/><div className="progress-text">{progressText}</div></div></div>);
}
.container {max-width: 600px;margin: 50px auto;text-align: center;font-family: Arial, sans-serif;
}.progress-container {margin-top: 20px;
}progress {width: 100%;height: 30px;border-radius: 5px;/* 自定义进度条样式(可选) */-webkit-appearance: none;appearance: none;
}progress::-webkit-progress-bar {background-color: #f0f0f0;border-radius: 5px;
}progress::-webkit-progress-value {background-color: #007bff;border-radius: 5px;
}.progress-text {margin-top: 10px;font-size: 16px;
}button {padding: 10px 20px;font-size: 16px;cursor: pointer;background-color: #007bff;color: white;border: none;border-radius: 5px;
}button:disabled {background-color: #6c757d;cursor: not-allowed;
}button:hover:not(:disabled) {background-color: #0056b3;
}

结果如下 

 

没问题。

还有一个upload这个函数,笔者就不演示了,主要是不知道上传什么。

就这样。


http://www.hkcw.cn/article/JILKTrkJHC.shtml

相关文章

《深度解构现代云原生微服务架构的七大支柱》

☁️《深度解构现代云原生微服务架构的七大支柱》 一线架构师实战总结&#xff0c;系统性拆解现代微服务架构中最核心的 7 大支柱模块&#xff0c;涵盖通信协议、容器编排、服务网格、弹性伸缩、安全治理、可观测性、CI/CD 等。文内附架构图、实操路径与真实案例&#xff0c;适…

ADAS概述

一、ADAS的概念 1.1 ADAS功能概述、架构方案、控制器、传感器 核心概念&#xff1a;ADAS(Advanced Driving Assistance System)是高级驾驶辅助系统的总称&#xff0c;包含三大类功能&#xff1a; 舒适体验类&#xff1a;如自适应巡航(ACC)、高速公路辅助(HWA)、车道居中控制&…

深入探讨redis:万字讲解集群

什么是集群 广义的集群&#xff1a;多个机器&#xff0c;构成了分布式系统&#xff0c;就可以称为“集群”。 狭义的集群&#xff1a;redis提供的集群模式&#xff0c;这个集群模式之下&#xff0c;主要解决的是存储空间不足的问题(拓展存储空间) 随着数据量的增多一台机器的…

一键开关机电路分析

左边电源9V为输入电源&#xff0c;中间有一个LDO&#xff0c;输出5V给右侧的芯片供电。 Q1是PNP三极管&#xff0c;Q2和Q3是NPN三极管。 初始状态下&#xff0c;按键断开&#xff0c;Q3截止&#xff0c;故Q1的基极为高电平&#xff0c;电压为9V&#xff0c;be间没有电流流过&am…

输入ifconfig,发现ens33不见了,无法连接至虚拟机

输入ifconfig&#xff0c;发现ens33不见了&#xff0c;无法连接至虚拟机 输入ifconfig&#xff0c;发现ens33不见了&#xff0c;无法连接至虚拟机 输入ifconfig&#xff0c;发现ens33不见了&#xff0c;无法连接至虚拟机 当输入ifconfig&#xff0c;发现少了ens33&#xff0c;无…

c++学习值---模版

目录 一、函数模板&#xff1a; 1、基本定义格式&#xff1a; 2、模版函数的优先匹配原则&#xff1a; 二、类模板&#xff1a; 1、基本定义格式&#xff1a; 2、类模版的优先匹配原则&#xff08;有坑哦&#xff09;&#xff1a; 3、缺省值的设置&#xff1a; 4、ty…

day62—DFS—太平洋大西洋水流问题(LeetCode-417)

题目描述 有一个 m n 的矩形岛屿&#xff0c;与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界&#xff0c;而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights &#xff0c; hei…

LeetCode第240题_搜索二维矩阵II

LeetCode 第240题&#xff1a;搜索二维矩阵 II 题目描述 编写一个高效的算法来搜索 m n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 难度 中等 题目链接 点击在LeetCode中查看题目…

开始通信之旅-----话题通信

1. 话题通信的流程 话题通信主要涉及到三个对象 管理者发布者订阅者 其主要流程如下图 详细解释一下&#xff1a;1.发布者向管理者发送发布话题等相关信息&#xff0c;在管理者处注册 2.订阅者向管理者发布订阅话题等相关信息&#xff0c;在管理者处注册 &#xff08;注意…

Ansible自动化运维工具全面指南:从安装到实战应用

目录 1 Ansible核心介绍 1.1 什么是Ansible&#xff1f; 1.2 Ansible核心特点解析 1.2.1 基于Python生态 1.2.2 无代理架构优势 1.2.3 幂等性实现原理 2 Ansible离线安装指南 2.1 内网环境安装准备 2.2 分步安装过程 2.2.1 安装依赖包 2.2.2 安装Ansible主包 2.2.3…

设计模式——模版方法设计模式(行为型)

摘要 模版方法设计模式是一种行为型设计模式&#xff0c;定义了算法的步骤顺序和整体结构&#xff0c;将某些步骤的具体实现延迟到子类中。它通过抽象类定义模板方法&#xff0c;子类实现抽象步骤&#xff0c;实现代码复用和算法流程控制。该模式适用于有固定流程但部分步骤可…

ACL基础配置

文章目录 基本ACL配置组网需求组网拓扑实验步骤测试结果配置文件 高级ACL配置组网需求组网拓扑实验步骤测试结果配置文件 基本ACL配置 组网需求 现组网结构如下&#xff0c;VPC充当服务器&#xff0c;PC3与PC4是两个不同的网段&#xff0c;实现拒绝192.168.1.0/24访问VPC 组…

Redis最佳实践——热点数据缓存详解

Redis在电商热点数据缓存中的最佳实践 一、热点数据定义与识别 1. 热点数据特征 高频访问&#xff08;QPS > 1000&#xff09;数据规模适中&#xff08;单条 < 10KB&#xff09;数据变化频率低&#xff08;更新间隔 > 5分钟&#xff09;业务关键性高&#xff08;直接…

Git初识Git安装

目录 1. Git初识 1.1 提出问题 1.2 如何解决--版本控制器 1.3 注意事项 2 Git安装 2.1 Centos 2.2 Ubuntu 2.3 Windows 1. Git初识 1.1 提出问题 不知道你工作或学习时&#xff0c;有没有遇到这样的情况&#xff1a;我们在编写各种文档时&#xff0c;为了防止文档丢失…

数据库原理 试卷

以下是某高校教学管理系统的毕业论文指导ER图&#xff0c;数据信息&#xff1a;一名教师指导多名学生&#xff0c;一名学生只能选择一名教师&#xff0c;试分析完成以下各题&#xff0c;如用SQL命令完成的&#xff0c;在SQL Server2008验证后把答案写在题目的下方。 图1 毕业论…

在线音乐平台测试报告

一、项目背景 1.1 测试目标 验证音乐播放器功能完整性&#xff0c;确保用户管理、音乐管理、播放控制、收藏功能等核心模块符合需求。 1.2 项目技术栈 后端&#xff1a;Spring Boot/Spring MVC 数据库&#xff1a;MySQL 前端&#xff1a;原生 HTML/CSS/AJAX 1.3 项目源码 …

基于GeoTools和OSM路网求解两条道路相交点-以长沙市为例

目录 前言 一、基础数据简介 1、QGIS数据展示 2、元数据介绍 二、GeoTools相交求解 1、加载路网数据 2、查找道路信息 3、计算相交点 4、集成调用及输出 三、总结 前言 今天是端午节也是六一儿童节&#xff0c;当端午节碰到儿童节&#xff0c;双节的碰撞。在这祝各位朋…

中国高分辨率高质量地面CO数据集(2013-2023)

时间分辨率&#xff1a;日空间分辨率&#xff1a;1km - 10km共享方式&#xff1a;开放获取数据大小&#xff1a;9.83 GB数据时间范围&#xff1a;2013-01-01 — 2023-12-31元数据更新时间&#xff1a;2024-08-19 数据集摘要 ChinaHighCO数据集是中国高分辨率高质量近地表空气污…

t018-高校宣讲会管理系统 【含源码!】

项目演示视频 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装高校宣讲会管理系统软件来发挥其高效地信息处…

NLP学习路线图(十四):词袋模型(Bag of Words)

在自然语言处理&#xff08;NLP&#xff09;的广阔天地中&#xff0c;词袋模型&#xff08;Bag of Words, BoW&#xff09; 宛如一块历经岁月沉淀的基石。它虽非当今最耀眼的明星&#xff0c;却为整个领域奠定了至关重要的基础&#xff0c;深刻影响了我们让计算机“理解”文本的…