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 ...
随机推荐
- JasperStudio study..
https://blog.csdn.net/shiyun123zw/article/details/79166448
- jmeter测试APP时如何录制脚本
jmeter录制脚本需要注意的点: (1)手机和电脑需要处于一个局域网内(如手机和电脑所使用一个wifi) (2)设置手机代理的时候手机IP填写本机IP,端口号要和jmeter的相同,一般情况下端口号 ...
- SQL执行计划Cost与性能之间的的关系
关于执行计划Cost的三个疑问: 1. 执行计划的Cost越低,SQL就一定跑得越快吗?或者说Cost 和 执行时间成比例关系吗? 2. Oracle 默认产生的执行计划是Cost最低的吗? 3. 如 ...
- More Effective C++: 05技术(29)
29:引用计数 本章首先实现一个带引用计数String,然后逐步优化,介绍引用计数的常规实现. 实现引用计数的String,首先需要考虑:引用计数在哪存储.这个地方不能在String对象内部,因为需要 ...
- (四)IO流之InputStream和OutputStream
InputStream:定义了字节输入流的抽象类 OutputStream:定义了字节输出流的抽象类;该类所有方法返回void值 FileInputStream:继承InputStream FileO ...
- 【Leetcode堆和双端队列】滑动窗口最大值(239)
题目 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 示例: 输入 ...
- String字符串的比较 Day15
package com.sxt.review; /* * String字符串的比较 * ==和equals() * 总结:比较String内容时用equals()方法 */ public class ...
- MUI - 解决弹出输入法时页面高度变小导致底部上浮的问题
解决弹出输入法时页面高度变小导致底部上浮的问题 在有输入框的页面,当输入法弹出的时候,底部元素上浮遮盖了输入框,影响页面美观及功能.查找了一下,页面变窄是不可避免的.即使是设置绝对固定也是不可以的.因 ...
- Python类型模块:types
types模块中定义了Python中所有的类型,包括NoneType, TypeType, IntType, FloatType, BooleanType, BufferType, Bui ...
- C函数和宏中的可变参数
一:调用惯例 函数的调用方和被调用方对函数如何调用应该有统一的理解,否则函数就无法正确调用.比如foo(int n, int m),调用方如果认为压栈顺序是m,n,而foo认为压栈顺序是n, m,那么 ...