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. 在CMD上运行java文件时出现错误:找不到或者无法加载主类的问题

    转载链接:https://blog.csdn.net/weixin_39085109/article/details/80189899

  2. Android Studio 生成Jar包以及是否混淆打包等ZengYuanFinn博客等你来查看

    1,Android studio生成jar包的前提是要确保生成的代码是引用的module工程: 2,在需要生成jar包的build.gradle(上图倒数第三行)中添加如下代码: //生成jar包 t ...

  3. 百度地图的API接口

    API接口 API:应用程序接口(API:Application Program Interface) python 为了在团队内部形成共识.防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好 ...

  4. 常见的abd命令

    https://blog.csdn.net/qq_34512207/article/details/125283285

  5. centos7普通用户拥有root权限并登录执行脚本

    1.useradd test 2.passwd test 3.usermod -s 脚本绝对路径 test 4.vi /etc/passwd修改test用户的uid和gid为0

  6. 【JavaScript】setAttribute在添加事件时失效解决办法

    HTML的表格行高亮,用JavaScript设置时总是在FireFox和谷歌浏览器中成功,但是在IE6,IE7中失败.最后发现是IE系列对DOM的setAttribute方法支持不好.如用: 1 tr ...

  7. 【Python】容器:列表(list)/字典(dict)/元组(tuple)/集合(set)

    三.Python容器:列表(list)/字典(dict)/元组(tuple)/集合(set) 1.列表(list) 1.1 什么是列表 是一个'大容器',可以存储N多个元素简单来说就是其他语言中的数组 ...

  8. node_modules/canvas npm ERR! command failed

    Installing packages. This might take a couple of minutes.Installing react, react-dom, and react-scri ...

  9. unity笔记001

    熟悉场景和物体的基本操作,q移动场景,e旋转物体,放大缩小,V键顶点吸附,相比快捷键,还是喜欢用xyz参数控制

  10. java 守护线程的关闭

    在进程内所有用户线程 全部消亡后,如果 守护线程仍在执行 ( 注意: 守护线程并不是一直运行中,守护线程中的代码执行完毕,则守护线程自然消亡. ),则会被强制消亡.