当前位置: 首页 > news >正文

Blazor 附件上传和下载功能

效果图

@page "/uploadFile"
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment
@inject ToastService ToastService
@inject DownloadService DownloadService<h3>UploadFile</h3><Button OnClick="@ButtonClick" Color="Color.Primary">弹窗上传组件</Button><Modal @ref="Modal" IsKeyboard="true"><ModalDialog Title="附件上传"><BodyTemplate><ButtonUpload TValue="string" ShowDownloadButton="true" OnDownload="OnDownload" IsSingle="true" IsMultiple="false" ShowProgress="true" OnChange="@OnClickToUpload"></ButtonUpload></BodyTemplate></ModalDialog>
</Modal>

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using System.Net.Http;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.Web.Virtualization;
using Microsoft.JSInterop;
using BlazorApp;
using BlazorApp.Shared;
using BootstrapBlazor.Components;
using System.Diagnostics.CodeAnalysis;namespace BlazorApp.Pages
{public partial class UploadFile{[NotNull]private Modal? Modal { get; set; }private CancellationTokenSource? ReadToken { get; set; }//文件大小200MBprivate static long MaxFileLength => 200 * 1024 * 1024;private void ButtonClick(MouseEventArgs e){this.Modal.Toggle();}//下载private async Task OnDownload(BootstrapBlazor.Components.UploadFile item){try{//文件上传路径,在wwwroot路径下//item.PrevUrl这个是上传的时候复制的,只能用作临时使用,从数据库读取的是另一种实现方式String filePath = WebHostEnvironment.WebRootPath + item.PrevUrl.Replace("/", "\\");await using var stream = File.OpenRead(filePath);await DownloadService.DownloadFromStreamAsync(item.File.Name, stream);await ToastService.Success("下载成功");}catch (FileNotFoundException msg){await ToastService.Error("下载", msg.Message);}}//点击上传private async Task OnClickToUpload(BootstrapBlazor.Components.UploadFile file){await SaveToFile(file);}//上传private async Task<bool> SaveToFile(BootstrapBlazor.Components.UploadFile file){// Server Side 使用// Web Assembly 模式下必须使用 webapi 方式去保存文件到服务器或者数据库中// 生成写入文件名称var ret = false;//文件上传路径,在wwwroot路径下String filePath = WebHostEnvironment.WebRootPath + "\\uploadFiles";if (!Directory.Exists(filePath)){Directory.CreateDirectory(filePath);}//保存到服务器的名字var fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + Guid.NewGuid().ToString().Replace("-", "") + Path.GetExtension(file.File.Name);var saveFilePath = Path.Combine(filePath, fileName);ReadToken ??= new CancellationTokenSource();//保存成功ret = await file.SaveToFileAsync(saveFilePath, MaxFileLength, ReadToken.Token);//把fileName到存数据库中,或者读取数据if (ret){//下载地址file.PrevUrl = "/uploadFiles/" + fileName;await ToastService.Success("上传文件成功");}else{var errorMessage = $"{"保存文件失败"} {file.OriginFileName}";file.Code = 1;file.Error = errorMessage;await ToastService.Error("上传文件", errorMessage);}return ret;}}
}

相关文章:

Blazor 附件上传和下载功能

效果图 page "/uploadFile" inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment inject ToastService ToastService inject DownloadService DownloadService<h3>UploadFile</h3><Button OnClick"ButtonClick" C…...

Git 安装配置

目录 Linux 平台上安装 Debian/Ubuntu Centos/RedHat 源码安装 Windows 平台上安装 Mac 平台上安装 Git 配置 用户信息 文本编辑器 差异分析工具 查看配置信息 在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。 Git …...

Center Smoothing Certified Robustness for Networks with Structured Outputs

文章目录 Center Smoothing: Certified Robustness for Networks with Structured OutputsSummaryResearch ObjectiveProblem StatementMethodsEvaluationConclusionNotesGaussian Smoothing常用希腊字母霍夫丁不等式&#xff08;Hoeffdings inequality&#xff09;1.简述2.霍夫…...

C#几种截取字符串的方法

在C#编程中&#xff0c;经常需要对字符串进行截取操作&#xff0c;即从一个长字符串中获取所需的部分信息。本文将介绍几种常用的C#字符串截取方法&#xff0c;并提供相应的示例代码。 目录 1. 使用Substring方法2. 使用Split方法3. 使用Substring和IndexOf方法4. 使用Regex类…...

【PG】PostgreSQL高可用方案repmgr部署(非常详细)

目录 简介 1 概述 1.1 术语 1.2 组件 1.2.1 repmgr 1.2.2 repmgrd 1.3 Repmgr用户与元数据 2 安装部署 2.0 部署环境 2.1 安装要求 2.1.1 操作系统 2.1.2 PostgreSQL 版本 2.1.3 操作系统用户 2.1.4 安装位置 2.1.5 版本要求 2.2 安装 2.2.1 软件包安装 2.2…...

Linux Makefile配置问题

编写一个简单的工程文件&#xff0c;制作Makefile需要包含lpthread&#xff0c;当Makefile写为如下配置时 #CROSSCOMPILE : arm-linux- CROSSCOMPILE :CFLAGS : -Wall -O2 -c CFLAGS -I$(PWD)LDFLAGS : -lpthread LDFLAGS -lm -ldlCC : $(CROSSCOMPILE)gcc #LD :…...

k8s篇之underlay网络和overlay区别

k8s中underlay网络和overlay区别 一、网络 1 Overlay网络&#xff1a; Overlay叫叠加网络也叫覆盖网络&#xff0c;指的是在物理网络的基础之上迭代实现新的虚拟网络&#xff0c;即可使网络中的容器可以互相通信。 优点是对物理网络的兼容性比较好&#xff0c;可以实现pod的…...

掉瓶子小游戏

欢迎来到程序小院 掉瓶子 玩法&#xff1a;旋转的瓶子&#xff0c;根据瓶子方向&#xff0c;点击鼠标左键瓶子掉落&#xff0c;从桌面中间掉下即得1分&#xff0c;卡在桌边瓶子碎了游戏结束&#xff0c;快去掉瓶子吧^^。开始游戏https://www.ormcc.com/play/gameStart/203 htm…...

Elasticsearch7 入门 进阶

1、全文检索 1.1、数据分类 按数据分类的话&#xff0c;主要可以分为以下三类&#xff1a; 结构化数据&#xff1a;固定格式、有限长度&#xff0c;比如mysql存的数据非结构化数据&#xff1a;不定长、无固定格式&#xff0c;比如邮件、Word文档、日志等半结构化数据&#xf…...

你是怎么封装微信小程序的数据请求的?

当封装微信小程序的数据请求时&#xff0c;可以采用一种模块化的方法&#xff0c;将请求逻辑与界面逻辑分离&#xff0c;以提高代码的可维护性和可扩展性。以下是一个基于前言、高质量代码、理解、优缺点和结尾的范例&#xff1a; 前言 在微信小程序中&#xff0c;数据请求是…...

C++ vector中capacity()和size() 的区别

size是指容器当前拥有元素的个数&#xff0c; capacity是指容器在必须分配新的存储空间之前可以存放的元素总数。 如vector<int> ivect(10),ivect.capacity()10&#xff0c;ivect.size()0, 当向ivect中插入元素时&#xff0c;只要没有超过10个&#xff0c;那么capacity就…...

【Redis】redis-server和redis-cli

上一篇《redis 的下载和安装》 https://blog.csdn.net/m0_67930426/article/details/134341071?spm1001.2014.3001.5501 安装完之后开始使用 打开客户端之前需要先打开服务端 redis-server 直接使用该命令打开就行 然后在打开客户端 redis-cli 使用ping命令查看是否连接服…...

【系统架构设计】架构核心知识: 2.4 系统建模过程和系统设计

目录 一 系统建模过程 1 结构化建模 2 信息工程建模方法 3 面向对象建模方法...

企业电子招标采购系统源码之从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看所…...

ubantu libssl.so.1.1: cannot open shared object file

libssl.so.1.1: cannot open shared object file 使用 Ubuntu 22.04 时&#xff0c;有时候会遇到如下错误 error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory 这是因为Ubuntu 22.04 默认使用的是 openssl3.0 …...

python matlplotlib/seaborn 绘制曲线的平均值标准差阴影图

1. seaborn 旧版本(0.8.1)中使用tsplot&#xff0c;新版本中使用lineplot 直线代表均值&#xff0c;阴影代表meanstd&#xff08;带有置信区间&#xff0c;参数ci&#xff09; import seaborn as sns import matplotlib.pyplot as plt import numpy as np import pandas as p…...

【Linux基础IO篇】深入理解文件系统、动静态库

【Linux基础IO篇】深入理解文件系统、动静态库 目录 【Linux基础IO篇】深入理解文件系统、动静态库再次理解文件系统操作系统内存管理模块&#xff08;基础&#xff09;操作系统如何管理内存 Linux中task_struct源码结构 动态库和静态库动静态库介绍&#xff1a;生成静态库库搜…...

flink 写入 starrocks 报错 too many filtered rows attachment

可能原因1 把你starrocks中DDL里的varchar(...) 先修改为STRING. 一般是因为字段超出定义的长度. 可能原因2 csv里有脏数据 导致3列被切分为4列 ....PRIMARY KEY (id) NOT ENFORCED ) WITH (connector starrocks,jdbc-url ...,username ...,password ...,database-nam…...

Windows 安装 Maven

目录 安装 JDK下载 Maven配置阿里云镜像配置环境变量 安装 JDK Windows 安装 JDK 下载 Maven 下载地址&#xff1a;https://maven.apache.org/download.cgi 下载 apache-maven-3.9.5-bin.zip 到本地解压到 D:\Software\apache-maven-3.9.5 配置阿里云镜像 配置阿里云远程仓…...

一文读懂关于IPv6的那些事

作为下一代互联网的战略发展方向&#xff0c;我国正加速IPv6的升级改造&#xff0c;目前从网络基础设施如运营商骨干网、城域网到互联网服务商如各类云服务以及包括手机、电脑、路由器等终端设备厂商都开始支持IPv6网络。那么到底什么是IPv6&#xff1f;IPv6有哪些特点呢&#…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...