Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >asp dotnet core 支持客户端上传文件

asp dotnet core 支持客户端上传文件

作者头像
林德熙
发布于 2019-03-13 03:27:22
发布于 2019-03-13 03:27:22
6.4K00
代码可运行
举报
文章被收录于专栏:林德熙的博客林德熙的博客
运行总次数:0
代码可运行

本文告诉大家如何在 asp dotnet core 支持客户端上传文件

新建一个 asp dotnet core 程序,创建一个新的类,用于给客户端上传文件的信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public class KanajeaLolowge
    {
        public IFormFile File { get; set; }

        public string Sha { get; set; }
    }

这个类包含两个信息,一个是 File 文件,另一个是文件校验,这个类可以随意命名,属性也可以随意命名,只要在客户端可以相同

打开一个 controller 添加一个新的函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        [HttpPost("UploadPackage")]
        public async Task<StatusCodeResult> UploadPackage([FromForm]KanajeaLolowge file)
        {
      
            return Ok();
        }

在这个函数添加特性 HttpPost 里面的参数就是访问链接,如上面的代码,加入所在的类是这样定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    [Route("api/[controller]")]
    [ApiController]
    public class GairKetemRairsemsController : ControllerBase

那么可以通过 api/GairKetemRairsems/UploadPackage 访问这个函数

在函数传入的参数使用 [FromForm]KanajeaLolowge file 的意思是通过 Post 提交 Form 的方法拿到参数

所以在客户端通过 Form 提交包含 File 和 Sha 信息的 Form 就可以通过链接调用这个方法

请看在客户端如何写

假设已经拿到文件的 FileStream 和计算出文件的 Sha 拿到链接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        private static async Task Upload(FileStream fileStream, string sha, string url)

在这个方法上传文件,通过 MultipartFormDataContent 构造一个 Form 请看代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            var multipartFormDataContent = new MultipartFormDataContent();
            multipartFormDataContent.Add(new StreamContent(fileStream), "File", fileName: "文件名.png");
            multipartFormDataContent.Add(new StringContent(sha), "Sha");

文件通过 StreamContent 传入 Stream 的值,加上的 File 参数是和 asp dotnet core 的上传类对应的属性名,最后的一个 fileName 指的是文件名,因为传入的是 Stream 可能是内存流,这时就无法拿到文件名,需要用户传入

下面的值是传入一个 Key value 的值,这里的 key 是 "Sha" 值是 sha 的值

创建一个 HttpClient 上传 Form 代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            var httpClient = new HttpClient();
            await httpClient.PostAsync(url, multipartFormDataContent);

这样调用这个 PostAsync 在 Asp dotnet core 就调用 UploadPackage 方法

通过这个方法就可以做到在 asp dotnet core 上传文件

获取文件 Sha 的方法请看下面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            var fileStream = fileInfo.OpenRead();
            string fileSha;
            using (var sha = SHA256.Create())
            {
                fileSha = Convert.ToBase64String(sha.ComputeHash(fileStream));

                fileStream.Seek(0, SeekOrigin.Begin);
            }

注意需要 fileStream 还原,也就是 fileStream.Seek(0, SeekOrigin.Begin) 如果没有添加,那么上传的 Stream 是没有长度

在 asp dotnet core 接收文件,然后校验文件的方法请看下面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       [HttpPost("UploadPackage")]
        public async Task<StatusCodeResult> UploadPackage([FromForm]KanajeaLolowge file)
        {
            var fileInfo = new FileInfo("E:\\1.png");

            var fileStream = fileInfo.Open(FileMode.Create, FileAccess.ReadWrite);

            await file.File.CopyToAsync(fileStream);

            fileStream.Seek(0, SeekOrigin.Begin);

            string fileSha;
            using (var sha = SHA256.Create())
            {
                fileSha = Convert.ToBase64String(sha.ComputeHash(fileStream));

                fileStream.Seek(0, SeekOrigin.Begin);
            }

            if (fileSha == file.Sha)
            {
                return Ok();
            }

            return BadRequest();
        }

如果需要将文件保存在 ContentRoot 可以通过在 controller 的构造函数添加 IHostingEnvironment 参数,在 IHostingEnvironment 参数拿到 ContentRootPath 值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        public GairKetemRairsemsController(IHostingEnvironment hostingEnvironment)
        {
            _context = context;
            _hostingEnvironment = hostingEnvironment;
        }
       
        private readonly IHostingEnvironment _hostingEnvironment;

在保存文件可以使用下面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            var fileInfo = new FileInfo(Path.Combine(_hostingEnvironment.ContentRootPath, "1.png"));

ASP.NET Core文件上传与下载(多种上传方式) - GuZhenYin - 博客园

File uploads in ASP.NET Core


本文会经常更新,请阅读原文: https://lindexi.gitee.io/post/asp-dotnet-core-%E6%94%AF%E6%8C%81%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
asp dotnet core 支持客户端上传文件
新建一个 asp dotnet core 程序,创建一个新的类,用于给客户端上传文件的信息
林德熙
2022/08/04
5.3K0
win10 uwp 使用 asp dotnet core 做图床服务器客户端 服务器端客户端
本文告诉大家如何在 UWP 做客户端和 asp dotnet core 做服务器端来做一个图床工具
林德熙
2019/03/13
2.8K0
win10 uwp 使用 asp dotnet core 做图床服务器客户端
            服务器端客户端
ASP.NET Core 警惕可空类型开启之后模型校验失败
在开启 Nullable 可空类型之后,原本可以调用的 API 也许就会提示 400 BadRequest 因为传入参数不合法,模型校验失败,此时将不会进入预期的 API 函数,同时也不会在输出里面找到有用的信息
林德熙
2020/08/31
1.5K0
ASP.NET Core文件上传与下载(多种上传方式)
前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧. ASP.NET Core 2.0 发展到现在,已经很成熟了.下个项目争取使用吧. 正文 1.使用模型绑定上传文件(官方例子) 官方机器翻译的地址:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads 这里吐槽一下 - -,这TM的机器翻译..还不如自己看E文的.. 首先我们需要
GuZhenYin
2018/03/30
5.7K0
ASP.NET Core文件上传与下载(多种上传方式)
dotnet 用 ASP.NET Core 制作一个可以上传库文件的 NuGet 服务器
我在写一个有趣的 WPF 应用,我想要测试这个 WPF 应用的一个功能,这个功能就是一键点击自动推送 NuGet 包到服务器。我想要做一点自动化的测试,我需要有某个假装是 NuGet 的服务器用来接收我这个应用推送的 NuGet 包。用 ASP.NET Core 写一个假装的 NuGet 服务器,支持被 NuGet 推送包是特别简单的,本文就来和大家说说这个后台如何写
林德熙
2020/04/08
7960
asp.net core web的导入导出excel功能
这里主要记录下asp.net core web页面上进行导入导出excel的操作。
Vincent-yuan
2019/09/11
4.1K0
asp.net core web的导入导出excel功能
C# dotnet 使用 FileStream 随机文件读写
本文说的随机文件读写的随机的反义词是顺序,这里的随机文件读写对应顺序文件读写。表示文件可以不按照顺序进行读写
林德熙
2020/07/28
1K0
win10 uwp 客户端如何发送类到 asp dotnet core 作为参数
本文告诉大家如何在 UWP 或 WPF 客户端通过将类转换为 json 发送到 asp dotnet core 作为方法的参数
林德熙
2019/03/13
1.6K0
dotnet core 通过修改文件头的方式隐藏控制台窗口
在带界面的 dotnet core 程序运行的时候就会出现一个控制台窗口,本文告诉大家使用最简单方法去隐藏控制台窗口。
林德熙
2022/08/04
7980
C# HttpClient 请求认证、数据传输笔记
客户端请求服务器时,需要通过授权认证许可,方能获取服务器资源,目前比较常见的认证方式有 Basic 、JWT、Cookie。
痴者工良
2021/04/26
2.5K0
.NET Core WebAPI 基础文件上传
这里有一个需要注意的地方,就是上传文件的参数名,需要跟接口的入参名一致,也就是 files,我们使用的类型为 IEnumerable< IFormFile>,主要是 IFormFile 这个,因为我们上传的文件可能不止一个,所以这里使用了集合,要是不喜欢 IEnumerable,换成 List 也是可以的;
郑子铭
2023/09/19
4190
.NET Core WebAPI 基础文件上传
用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传
这部分就讲从angular5的客户端上传图片到asp.net core 2.0的 web api. 这是需要的源码: https://pan.baidu.com/s/1Eqc4MRiQDwOHmu0O
solenovex
2018/03/29
3K0
用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传
UnityWebRequest教程☀️2021,你还在使用过时的 www API吗?
UnityWebRequest数据传输,除了一般我们用的最多的Post、Get,其实还有Put、Head
星河造梦坊官方
2024/08/15
1810
UnityWebRequest教程☀️2021,你还在使用过时的 www API吗?
.NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
   在需要通过服务端请求传递文件二进制文件流数据到相关的服务端保存时,如对接第三方接口很多情况下都会提供一个上传文件的接口,但是当你直接通过前端Ajax的方式将文件流上传到对方提供的接口的时候往往都会存在跨域的情况,这时候我们就需要通过服务端提交文件流来解决这个跨域的情况。本篇的主角就是使用HttpClient进行Http请求,提交二进制文件流到文件服务器中。
追逐时光者
2021/06/11
3.5K0
.NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
.net core 上传文件到本地服务器
GoodTime
2023/10/31
4550
童鞋,[HttpClient发送文件的技术实践]请查收
之前我写了一个《ABP小试牛刀之上传文件》,主要体现的是服务端,上传文件的动作是由前端小姐姐完成的, 我还真没有用HttpClient编程方式发送过文件。
有态度的马甲
2021/12/21
7930
童鞋,[HttpClient发送文件的技术实践]请查收
.net mvc + layui做图片上传(二)—— 使用流上传和下载图片
摘要:上篇文章写到一种上传图片的方法,其中提到那种方法的局限性,就是上传的文件只能保存在本项目目录下,在其他目录中访问不到该文件。这与浏览器的安全性机制有关,浏览器不允许用户用任意的路径访问服务器上的资源,因为这可能造成服务器上其他位置的信息被泄露。浏览器只允许用户用相对路径直接访问本项目路径下的资源。那么,如果A项目要访问B项目上传的文件资源,这就产生问题了。所以这就需要另外一种方法来解决这个问题,那就是通过 流(Stream)的形式上传和下载文件资源。这种方法因为不是通过路径直接访问文件,而是先把文件读取的流中,然后将流中的数据写入到新的文件中,还原需要上传的文件,所以也就不存在上面的问题了。本片博客,着重介绍一下这种方式的实现。
CherishTheYouth
2019/07/30
2.1K0
.net mvc + layui做图片上传(二)—— 使用流上传和下载图片
ASP.NET Core File Providers
原文地址:FileProvider By Steve Smith ASP.NET Core通过对File Providers的使用实现了对文件系统访问的抽象。 查看或下载示例代码 File Provider 抽象 File Providers是文件系统之上的一层抽象。它的主要接口是IFileProvider。IFileProvider公开了相应方法用来获取文件信息(IFileInfo), 目录信息(IDirectoryContents),以及设置更改通知(通过使用一个IChangeToken)。 IFile
潘成涛
2018/01/18
9600
ASP.NET Core File Providers
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
  从开始学习Vue到使用element-ui-admin已经有将近快两年的时间了,在之前的开发中使用element-ui上传组件el-upload都是直接使用文件选取后立即选择上传,今天刚好做了一个和之前类似的文件选择上传的需求,不过这次是需要手动点击按钮把文件上传到服务器中进行数据导入,而且最多只能够选择一个文件进行上传,上传成功后需要对file-list中的文件列表数据进行清空操作,在这里服务端使用的是ASP.NET Core WEB API来进行文件流数据接收和保存。
追逐时光者
2020/04/16
2.5K0
Android实现TCP断点上传,后台C#服务实现接收
终端实现大文件上传一直都是比较难的技术,其中涉及到后端与前端的交互,稳定性和流量大小,而且实现原理每个人都有自己的想法,后端主流用的比较多的是Http来实现,因为大多实现过断点下载。但稳定性不能保证,一旦断开,无法续传。所以得采用另一种流行的做法,TCP上传大文件。 网上查找了一些资料,大多数是断点下载,然后就是单独的C#端的上传接收,或是HTTP的,或是只有android端的,由于任务紧所以之前找的首选方案当然是Http先来实现文件上传,终端采用Post方法,将文件直接传至后端,后端通过File来获得。
欢醉
2018/01/22
1.1K0
推荐阅读
相关推荐
asp dotnet core 支持客户端上传文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验