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. Win10下如何添加“中文简体(美式键盘)”输入法

    参考Win10下如何添加"中文简体(美式键盘)"输入法 设置>>时间和语言>>语言>>添加语言>>选择要安装的语言>>英 ...

  2. nxp imx8m与imx6 使用VPU时,申请CMA的区别

    imx8mp是什么时候申请CM的: imx8mp是我自己看的,imx6不一定保熟. imx8mp: imx6:

  3. 自定义select组件

    (声明:当前记录篇参考于该人员 https://www.jb51.net/article/166679.htm ) 一.创建组件 1.新建文件夹:select 2.新建Component: selec ...

  4. 异步串口通信协议--UART

    UART(通用异步收发传输器)将由计算机内部传送过来的并行数据转换为输出的串行数据流.将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用. 在输出的串行数据流中加入奇偶校验位,并对 ...

  5. Odoo编程,说明,功能,文章收藏贴

    CN Blog: https://www.cnblogs.com/Firstwing/p/14088500.html #http://blog.sina.com.cn/s/blog_bc7dee2d0 ...

  6. @order(1)

    @order(num),数字表示加载顺序 1.AOP加载顺序(切面加载顺序) 2.配置类加载顺序

  7. ref、reactive、toRef、toRefs使用与区别

    reactive 传参:reactive(arg),arg只能是对象 arg为普通对象 返回响应式对象,不管层级多深,都能响应 使用:获取数据值的时候直接获取,不需要加.value 特点:解构.扩展运 ...

  8. 整数中出现1的次数(从1到n整数中1出现的次数)

    offer_31 概要:整数中出现1的次数(从1到n整数中1出现的次数) 题目描述 求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有 ...

  9. We've detected suspicious behavior from phone numbers similar to yours. Please try again later or contact us through our help center at help.openai.com.

    原因 很多人使用该地区号码,被限制住了 解决办法 过会儿再试,或者换个地区接码

  10. Docker之RabbitMQ保姆级别安装

    Docker之RabbitMQ保姆级别安装: 如果觉得样式不好:跳转即可 http://www.lifengying.site/(md文件复制过来有些样式会不一样) 学英语网站项目:自己先保证Redi ...