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 接收并存储客户端上传的文件的更多相关文章

  1. HttpClient由Client客户端上传File文件流至Server服务端

    客户端方法 public static void main(String[] args) { File file=new File("E:\\lucene\\rev\\全年平台受理量.doc ...

  2. windows上在linux客户端上传小文件lrzsz

    yum install lrzsz 即可 rz上传,会打开本地图形化界面直接上传 基于centos系统,其他系统请找对应 的源码包编译 一下

  3. window配置ftp服务,代码客户端上传下载文件

    1 开启ftp服务 打开控制面板,点击程序,找到程序和功能,点击”打开或关闭windows功能” 找到“Internet信息服务”,点击前面的加号,展开功能,勾选”FTP服务”,“FTP扩展性”,“I ...

  4. xutils工具上传日志文件--后台服务器的搭建

    在上一篇文章中使用xutils将手机上保存的日志上传到后台服务器中,现在我们来讲后台服务器是如何搭建的 后台服务器采用jsp+sevlet+mysql的框架 首先讲mysql数据库的表的建立 在fil ...

  5. Go语言网络通信---tcp上传大文件(粘包问题还需优雅解决)

    server端: package main import ( "bufio" "encoding/binary" "fmt" "n ...

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

    本文告诉大家如何在 asp dotnet core 支持客户端上传文件 新建一个 asp dotnet core 程序,创建一个新的类,用于给客户端上传文件的信息 public class Kanaj ...

  7. web api 如何通过接收文件流的方式,接收客户端及前端上传的文件

    服务端接收文件流代码: public async Task<HttpResponseMessage> ReceiveFileByStream() { var stream = HttpCo ...

  8. 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的路由方案,与原来的方案在使用上差别不 ...

  9. form表单文件上传 servlet文件接收

    需要导入jar包 commons-fileupload-1.3.2.jar commons-io-2.5.jar Upload.Jsp代码 <%@ page language="jav ...

  10. asp.net core流式上传大文件

    asp.net core流式上传大文件 首先需要明确一点就是使用流式上传和使用IFormFile在效率上没有太大的差异,IFormFile的缺点主要是客户端上传过来的文件首先会缓存在服务器内存中,任何 ...

随机推荐

  1. C# 字符串数组去重(去除数组中重复元素)

    1. 去重distinct()或者GroupBy(p => p).Select(p => p.Key),去重的对象都需要为数组,具体看代码 string itemfileids = &qu ...

  2. gitee下载项目

    PS:如果直接在gitee仓库中选择下载zip,在本地打开项目后是不会与gitee远程库绑定的.如果要与远程库同步,需要选择克隆,同样的,本地需要先搭建好git环境. 1.在本地新建文件夹 2.在文件 ...

  3. 晓晓---python文件的读写模式的理解

    1. python读取文件模式的自我理解:'r' open for reading (default)----只读模式打开文件,不能写:'w' open for writing, truncating ...

  4. :)模型保存为单一个pb文件

    模型保存为单一个pb文件 背景 参考连接: https://www.yuque.com/g/jesse-ztr2k/nkke46/ss4rlv/collaborator/join?token=XUVZ ...

  5. kmp失效函数(测试博客的编辑器)

    1 int *find_next(char *p) 2 { 3 int k = -1; //right shift i-k 4 int i = 0; 5 int m = strlen(p); 6 in ...

  6. Filter Pattern 2 (dubbo的实现方式)

    前一篇FilterPattern的范式,基本和Tomcat实现的filter chain是一样的: 这里介绍一下我看完dubbo关于Filter Pattern的实现思路,自己抽象出来的代码,以及理解 ...

  7. 前后端API交互数据加密——AES与RSA混合加密完整实例(转载)

    前言 前段时间看到一篇文章讲如何保证API调用时数据的安全性(传送门:https://blog.csdn.net/ityouknow/article/details/80603617),文中讲到利用R ...

  8. 通过EXCEL/WPS文件,拼接SQL,刷数据库数据

    WPS如何把日期变成文本格式? [快捷选择同一列多条记录]同一列,鼠标左键标记A,SHIFT+鼠标左键标记B ,等于选择A-B的之间的数据 [向下填充]在第一行输入数据,选择同一列A-B的之间的数据, ...

  9. 串口USART(续二)

    通过前面的分析知道,在LPC824中,USART所拥有的配置寄存器有很多,但在一般情况下,如果只是简单地使用收发功能,则只需要使用到配置寄存器CFG.波特率发生器寄存器BRG.中断使能读取和置位寄存器 ...

  10. WPF侧边导航栏实现

    一.先看效果 1 添加Nuget库 站长使用.Net Core 3.1创建的WPF工程,创建"DropDownMenu"解决方案后,需要添加两个Nuget库:MaterialDes ...