asp dotnet core 支持客户端上传文件
本文告诉大家如何在 asp dotnet core 支持客户端上传文件
新建一个 asp dotnet core 程序,创建一个新的类,用于给客户端上传文件的信息
public class KanajeaLolowge
{
public IFormFile File { get; set; }
public string Sha { get; set; }
}
这个类包含两个信息,一个是 File 文件,另一个是文件校验,这个类可以随意命名,属性也可以随意命名,只要在客户端可以相同
打开一个 controller 添加一个新的函数
[HttpPost("UploadPackage")]
public async Task<StatusCodeResult> UploadPackage([FromForm]KanajeaLolowge file)
{
return Ok();
}
在这个函数添加特性 HttpPost 里面的参数就是访问链接,如上面的代码,加入所在的类是这样定义
[Route("api/[controller]")]
[ApiController]
public class GairKetemRairsemsController : ControllerBase
那么可以通过 api/GairKetemRairsems/UploadPackage 访问这个函数
在函数传入的参数使用 [FromForm]KanajeaLolowge file 的意思是通过 Post 提交 Form 的方法拿到参数
所以在客户端通过 Form 提交包含 File 和 Sha 信息的 Form 就可以通过链接调用这个方法
请看在客户端如何写
假设已经拿到文件的 FileStream 和计算出文件的 Sha 拿到链接
private static async Task Upload(FileStream fileStream, string sha, string url)
在这个方法上传文件,通过 MultipartFormDataContent 构造一个 Form 请看代码
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 代码
var httpClient = new HttpClient();
await httpClient.PostAsync(url, multipartFormDataContent);
这样调用这个 PostAsync 在 Asp dotnet core 就调用 UploadPackage 方法
通过这个方法就可以做到在 asp dotnet core 上传文件
获取文件 Sha 的方法请看下面
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 接收文件,然后校验文件的方法请看下面
[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 值
public GairKetemRairsemsController(IHostingEnvironment hostingEnvironment)
{
_context = context;
_hostingEnvironment = hostingEnvironment;
}
private readonly IHostingEnvironment _hostingEnvironment;
在保存文件可以使用下面代码
var fileInfo = new FileInfo(Path.Combine(_hostingEnvironment.ContentRootPath, "1.png"));
ASP.NET Core文件上传与下载(多种上传方式) - GuZhenYin - 博客园
我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新
如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
asp dotnet core 支持客户端上传文件的更多相关文章
- ASP.NET Core MVC如何上传文件及处理大文件上传
用文件模型绑定接口:IFormFile (小文件上传) 当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发AS ...
- 2019-8-31-asp-dotnet-core-支持客户端上传文件
title author date CreateTime categories asp dotnet core 支持客户端上传文件 lindexi 2019-08-31 16:55:58 +0800 ...
- asp.net core流式上传大文件
asp.net core流式上传大文件 首先需要明确一点就是使用流式上传和使用IFormFile在效率上没有太大的差异,IFormFile的缺点主要是客户端上传过来的文件首先会缓存在服务器内存中,任何 ...
- asp.net 客户端上传文件全路径获取方法
asp.net 获取客户端上传文件全路径方法: eg:F:\test\1.doc 基于浏览器安全问题,浏览器将屏蔽获取客户端文件全路径的方法,只能获取到文件的文件名,如果需要获取全路径则需要另想其他 ...
- Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件:
Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件: public static String post(String actionU ...
- asp.net中FileUpload得到上传文件的完整路径
asp.net中FileUpload得到上传文件的完整路径 Response.Write("完整路径:" + Server.MapPath(FileUpload1.PostedFi ...
- ASP.NET MVC 4 批量上传文件
上传文件的经典写法: <form id="uploadform" action="/Home/UploadFile" method="post& ...
- ASP.NET MVC 4 Ajax上传文件
这两天一直纠结着表单的问题.想在一个表单里实现三个功能: 输入查询条件,点击查询: 导出查询数据: 上传文件: 方法有很多,乱花渐欲迷人眼,尝试了很多,无果.大致说的是,给不同按钮写js代码,在js代 ...
- asp.net 一般处理程序接收上传文件的问题
在使用Html+ashx处理文件上传时,遇到上传文件超过4M的问题,首先HTML代码如下: <!DOCTYPE html> <html> <head> <me ...
随机推荐
- openjudge dp水题记录
当发现自己竟然不会打dp的时候内心是崩溃的,然后按照一年前的刷题记录刷openjudge,然后发现自己准确率比一年前(刚学信竞两个月时)的准确率低得多,已经没救. 列一下最近打的几道sb题 2985: ...
- Inno Setup生成桌面快捷方式
在做项目的时候,需要打包成exe安装包.先前使用的是vs来打包,生成了setup.exe 和 *.msi的安装文件,不过也算顺利. 后因为要求采取 Inno Setup来打包程序,其中遇到个创建快捷方 ...
- Python里的堆heapq
实际上,Python没有独立的堆类型,而只有一个包含一些堆操作函数的模块.这个模块名为heapq(其中的q表示队列),默认为小顶堆.Python中没有大顶堆的实现. 常用的函数 函 数 描 述 hea ...
- Python学习之路13☞常用模块
一 time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(t ...
- POJ 2632 Crashing Robots (模拟 坐标调整)(fflush导致RE)
题目链接:http://poj.org/problem?id=2632 先话说昨天顺利1Y之后,直到今天下午才再出题 TAT,真是刷题计划深似海,从此AC是路人- - 本来2632是道略微恶心点的模拟 ...
- Cmakelists.txt中配置glew
在cmakelists.txt中添加: add_library(glew_static STATIC IMPORTED) set_target_properties(glew_static PROPE ...
- onethink 返回上一页
// 记录当前列表页的cookie Cookie('__forward__',$_SERVER['REQUEST_URI']); $this->success('操作成功!',Co ...
- Oracle中组合索引的使用详解(转)
在Oracle中可以创建组合索引,即同时包含两个或两个以上列的索引.在组合索引的使用方面,Oracle有以下特点: 1. 当使用基于规则的优化器(RBO)时,只有当组合索引的前导列出现在SQL语句的w ...
- EF的多线程与分库架构设计实现(2)
距离上次讲解EF6分库架构(https://www.cnblogs.com/gbat/p/6374607.html)实现已经过去2年了..上次发出来后,一直到现在依然有很多人陆陆续续的加我好友,问我要 ...
- Hbase数据模型 行