.net core 接收并存储客户端上传的文件
1 文件是上传到Host,非上传到阿里云OSS
2 在Program.cs或StartUp中使用静态文件的中间件
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{ app.UseStaticFiles(); }
.net core 创建的api项目中,会有一个wwwroot文件夹,在wwwroot文件夹我们创建一个image文件夹,image文件夹中有一个图片a.jpg,当中间件UseStaticFiles启用后,我们可以通过在浏览器上输入[ip]:[port]/image/a.jpg成功浏览图片。
3 Controller具体代码
1 [HttpPost("UploadInvoiceFile")]
2 public async Task<IActionResult> UploadFile(IFormFile file)
3 {
4 if (!new[] {"image/jpeg", "image/png", "application/pdf"}.Contains(file.ContentType))
5 return BadRequest("图片仅支持jpg和png格式,文件支持pdf");
6
7
8 if (file is {Length: > 0})
9 try
10 {
11 var fileName = Path.GetFileName(file.FileName);
12
13 var staticFileRoot = "wwwroot";
14 // 这里是文件路径,不包含文件名
15 var fileUrlWithoutFileName =
16 @$"InvoiceStaticFile\{DateTime.Now.Year}\{DateTime.Now.Month}\{DateTime.Now.Day}";
17
18 // 创建文件夹,如果文件夹已存在,则什么也不做
19 Directory.CreateDirectory($"{staticFileRoot}/{fileUrlWithoutFileName}");
20
21 //string fileName = Path.GetFileName(postedFile.FileName);
22 //using (FileStream stream = new FileStream(Path.Combine(path, fileName), FileMode.Create))
23 //{
24 // postedFile.CopyTo(stream);
25 // uploadedFiles.Add(fileName);
26 // ViewBag.Message += string.Format("<b>{0}</b> uploaded.<br />", fileName);
27 //}
28 // 使用哈希的原因是前端可能传递相同的文件,服务端不想保存多个相同的文件
29
30 var hash = SHA256.Create();
31 // 读取文件的流 把文件流转为哈希值
32 var hashByte = await hash.ComputeHashAsync(file.OpenReadStream());
33 // 再把哈希值转为字符串 当作文件的文件名
34 var hashedFileName = BitConverter.ToString(hashByte).Replace("-", "");
35
36 // 重新获得一个文件名
37 var newFileName = hashedFileName + "." + fileName.Split('.').Last();
38
39 var filePath = Path.Combine(Directory.GetCurrentDirectory(),
40 $@"{staticFileRoot}\{fileUrlWithoutFileName}", newFileName);
41
42 await using var fileStream = new FileStream(filePath, FileMode.Create);
43 await file.CopyToAsync(fileStream);
44 return Created("", new {Name = fileName, Url = Path.Combine(fileUrlWithoutFileName, newFileName)});
45 }
46 catch (Exception e)
47 {
48 _logger.LogError(e, "保存文件出错。错误消息:" + e.Message);
49 throw;
50 }
51
52 return BadRequest("请上传文件");
53 }
.net core 接收并存储客户端上传的文件的更多相关文章
- HttpClient由Client客户端上传File文件流至Server服务端
客户端方法 public static void main(String[] args) { File file=new File("E:\\lucene\\rev\\全年平台受理量.doc ...
- windows上在linux客户端上传小文件lrzsz
yum install lrzsz 即可 rz上传,会打开本地图形化界面直接上传 基于centos系统,其他系统请找对应 的源码包编译 一下
- window配置ftp服务,代码客户端上传下载文件
1 开启ftp服务 打开控制面板,点击程序,找到程序和功能,点击”打开或关闭windows功能” 找到“Internet信息服务”,点击前面的加号,展开功能,勾选”FTP服务”,“FTP扩展性”,“I ...
- xutils工具上传日志文件--后台服务器的搭建
在上一篇文章中使用xutils将手机上保存的日志上传到后台服务器中,现在我们来讲后台服务器是如何搭建的 后台服务器采用jsp+sevlet+mysql的框架 首先讲mysql数据库的表的建立 在fil ...
- Go语言网络通信---tcp上传大文件(粘包问题还需优雅解决)
server端: package main import ( "bufio" "encoding/binary" "fmt" "n ...
- asp dotnet core 支持客户端上传文件
本文告诉大家如何在 asp dotnet core 支持客户端上传文件 新建一个 asp dotnet core 程序,创建一个新的类,用于给客户端上传文件的信息 public class Kanaj ...
- web api 如何通过接收文件流的方式,接收客户端及前端上传的文件
服务端接收文件流代码: public async Task<HttpResponseMessage> ReceiveFileByStream() { var stream = HttpCo ...
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
- form表单文件上传 servlet文件接收
需要导入jar包 commons-fileupload-1.3.2.jar commons-io-2.5.jar Upload.Jsp代码 <%@ page language="jav ...
- asp.net core流式上传大文件
asp.net core流式上传大文件 首先需要明确一点就是使用流式上传和使用IFormFile在效率上没有太大的差异,IFormFile的缺点主要是客户端上传过来的文件首先会缓存在服务器内存中,任何 ...
随机推荐
- Mysql数据库的表结构
[INFORMATION_SCHEMA 数据库] 是MySQL自带的,它提供了访问数据库 元数据 的方式, 元数据:数据库名或表名,列的数据类型,或访问权限等. 在MySQL中,把[INFORMATI ...
- CSS渐变样色的字
width: 118px; height: 17px; font-size: 13px; font-family: MicrosoftYaHei-Bold, MicrosoftYaHei; font- ...
- [USACO12FEB]Overplanting S
洛咕 题意:在一个笛卡尔平面坐标系里(X轴向右是正方向,Y轴向上是正方向),有\(N(1<=N<=1000)\)个矩形,第\(i\)个矩形的左上角坐标是\((x1, y1)\),右下角坐标 ...
- Jmeter固定吞吐量控制器Constant Throughput Timer
控制请求的TPS,可以使用JMETER的固定吞吐量控制器Constant Throughput Timer Target throughput(in samples per minute):目标吞吐量 ...
- 基于recorder.js H5录音功能
兼容性 1.Chrome,FF,Edge,QQ,360(注:现有IE和Safari全版本不兼容) 2.其中Chrome47以上以及QQ浏览器强制要求HTTPS的支持 3.请尝试使用FF,Edge,36 ...
- Promise的几个方法解析
Promise.all 此方法在集合多个 promise 的返回结果时很有用. 输入的promise中只要有一个reject,即进入reject,否则会进入then 完成(Fulfillment):在 ...
- css3字体颜色渐变
效果图: 代码: <span class="titleName">这是个测试字体</span> .titleName { background: linea ...
- ABAP SmartForms开发脚本补丁
当时因为编辑不舒服找了还挺久的Smartforms开发脚本补丁,这里记录一下 补丁下载路径:http://www.drv5.cn/sfinfo/16341.html 当安装补丁后不再以Word形式展现 ...
- -bash: ./mlnxofedinstall: /usr/bin/perl: bad interpreter: No such file or directory
-bash: ./mlnxofedinstall: /usr/bin/perl: bad interpreter: No such file or directory 解决办法:安装相关的环境即可 输 ...
- js 拖动图片
<script type="text/javascript"> var oipc = document.getElementById('pic'); var isDra ...