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. docker0 flannel.1不在同一网段

    现象: docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.2 ...

  2. SpringBoot整合MyBatis-Plus详细使用方法

    SpringBoot整合mp 一.添加依赖pom.xml <dependency> <groupId>mysql</groupId> <artifactId& ...

  3. Kotlin属性委托

    业务定义 对于属性,我们可以读取(get)和赋值(set),在Java中会定义get和set方法来操作属性,Kotlin的属性建议直接操作,一些业务的要求会对属性有额外的功能需求,在Java中会在ge ...

  4. 在CIMES中调用存储过程

    页面 调用步骤 DataTable dtResult = null; CustomDataAgent TODB_con = DBCenter.Create(AppSetting.Manufacturi ...

  5. 总结ref和out的区别

    之前每次遇到ref和out时,老是忘记他们的使用方法和区别.每次都要网上搜一下别人写的博客来回忆.这次干脆自己整合一下别人博客的内容,方便下次忘记时查询. 用途: 在C#中通过使用方法来获取返回值时, ...

  6. Java 并发线程池线程数配置

    1. 如果任务是计算密集型的,线程池大小建议设置为Ncpu + 1 其中N是CPU数量, +1 是为了在某一个线程处于暂停阶段时,有新的线程可以用来执行,减少CPU中断时间. 2. 如果是IO密集型, ...

  7. RSS经典教程

    RSS经典教程 作者:OLD HELPSoldhelps@126.com RSS 指 Really Simple Syndication(真正简易联合) RSS 使您有能力聚合(syndicate)网 ...

  8. How to Avoid Trivial Solutions in Physics-Informed Neural Networks

    未发表(2021) 本文也是关注采样点的一篇工作.主要从PINN的性能与采样点数量的关系方面入手考虑.提出了一个新的惩罚项,并对采样策略提出了一点看法. 本文的工作相对比较直观,简单,效果可能并不是很 ...

  9. 离线谷歌地图API的开发笔记(二)

    一.地图引擎介绍 离线地图引擎运行在WINDOWS平台上,底层由Visual c++语言开发,编译为OCX插件方式.占用文件少,便于二次开发的快速安装部署. 具有专业地图的基础操作功能:地图放大.缩小 ...

  10. 常用的Linux命令与它们的功能

    概要 filename 文件名 dir 文件夹名 string 字符串 username 用户名 groupname 组名 regex 正则表达式 path 路径 partition 分区名 port ...