首页 > 编程语言 >asp.net Core上传文件

asp.net Core上传文件

时间:2023-08-03 21:44:34浏览次数:34  
标签:files Core asp fileName file var net 上传 客户端

asp.net core后台代码

通过Request获取客户端上传的文件

[HttpPost]
        [Route("Upload")]
        public async Task<IActionResult> uploadFiles()
        {
            try
            {                                
                foreach (var file in Request.Form.Files.Where(p => p.Length > 0))
                {   
                    string fileName = @"C:\" + file.FileName;
                    using (var stream = System.IO.File.Create(fileName))
                    {
                        await file.OpenReadStream().CopyToAsync(stream);
                    }                    
                }
                return Ok(new { Result = true });
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }

也可以通过入参IFormFileCollection获取文件

[HttpPost]
        [Route("Upload")]
        public async Task<IActionResult> uploadFiles(IFormFileCollection files)
        {
            try
            {                                
                foreach (var file in files.Where(p => p.Length > 0))
                {   
                    string fileName = @"C:\" + file.FileName;
                    using (var stream = System.IO.File.Create(fileName))
                    {
                        await file.OpenReadStream().CopyToAsync(stream);
                    }                    
                }
                return Ok(new { Result = true });
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }

第二种写法在客户端调用的时候要注意,名字必须跟入参files保持一致,要不然文件上传不上来。
客户端,通过postman调用,如下

 如果后台用第二种写法,这里的key必须跟入参变量名files一样,否则文件上传不上来,第二种写法key值无所谓。
客户端使用HttpClient调用

string fileName = "TestFile1.pdf";
content.Add(new StreamContent(System.IO.File.OpenRead(@"C:\Files\" + fileName)), "files", fileName);
fileName = "TestFile2.pdf";
content.Add(new StreamContent(System.IO.File.OpenRead(@"C:\Files\" + fileName)), "files", fileName);

var response = await client.PostAsync(url, content);
Console.WriteLine(response.Content.ReadAsStringAsync().Result);

跟postman调用一样,content的add方法,第二个参数,如果后台是第二种写法,必须是入参变量名files。
再测试过程中发现一个问题,把asp.net core程序发布到iis上,当上传文件大于64k时会报500 internal server error。
这是由于文件大于64K(没有找到文档说明是这个值,可能不准确)时,会把客户端接收的文件先写入windows temp文件夹下,如果应用程序池的运行账户没有写入temp文件夹的权限,就会报500错误。



标签:files,Core,asp,fileName,file,var,net,上传,客户端
From: https://www.cnblogs.com/Farseer1215/p/17604559.html

相关文章

  • .Net Core MiddleWare
    目录作用Use第一种第二种UseMiddleWareCustomMiddleWare.csProgram.csMapMapWhen作用中间件是一种装配到应用管道以处理请求和响应的软件。每个组件:选择是否将请求传递到管道中的下一个组件。可在管道中的下一个组件前后执行工作。请求委托用于生成请求管道。请求委托......
  • RS485自由转PROFINET网关RS485自由通讯协议
    捷米JM-RS485/232-PN(RS485转Profinet)将具有RS485/232接口、自由通信协议接口的设备与PROFINET相连,作为PROFINET现场总线系统的一个设备。捷米JM-RS485/232-PN集成了一个2端口交换机。受支持的以太网服务:ping、arp、SNMP和LLDP。端口诊断。禁用端口。实时、等时同步实时通信(RT......
  • T4 模板: 为 ASP.NET MVC 开发人员快速入门指南
    http://blogs.msdn.com/b/webdev/archive/2009/01/29/t4-templates-a-quick-start-guide-for-asp-net-mvc-developers.aspx 在中提到我们的最近博客文章,ASP.NETMVC发布候选版,我们的代码生成功能(即,添加控制器和添加视图)现在使用T4(文本模板转换工具包)模板化技术在幕后。因为......
  • C# MVC 自学笔记—10 在 ASP.NET MVC 中使用页面检查器
    VisualStudio2012年页督察是与集成的浏览器的web开发工具。中集成浏览器中,选择任意元素,页面检查器立即突出显示该元素的源代码和CSS。可以浏览任何MVC视图、快速查找呈现标记的来源和使用右内的VisualStudio环境浏览器工具。观看视频本教程演示如何启用检查模式,然后快......
  • 堆 Heap & 栈 Stack(.Net)【概念解析系列_3】【C# 基础】
    〇、前言本文主要围绕.Net框架中的托管堆(Heap,简称堆)和堆栈(Stack,简称栈)展开。.Net程序在CLR(CommonLanguageRuntime公共语言运行时)上运行时,内存被从逻辑上划分为两个主要部分:堆和栈。除了栈和堆之外,CLR还维护了其他一些内存区域,例如静态存储区域(StaticStorageArea)、常量......
  • 自己整理的ASP.NET基础 (不断的更新)
    .列举ASP.NET页面之间传递值的几种方式。答.1).使用QueryString,如....?id=1;response.Redirect()....                 2).使用Session变量                 3).使用Server.Transfer--------------------------------------------......
  • Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
         在VS2010中创建一个如图1所示的“ExtShop”项目,然后在图2的窗口中选择“Empty”,单击“OK”完成项目创建,项目的目录结构和已包含文件如图3所示。     其中,Content文件夹下的Site.css文件是整个网站的CSS文件。Script文件夹中,已包含了jquery的脚本文件。在View目录......
  • Netty 原理解析与实战开发(二)
    Netty原理解析与开发实战八、ChannelHandler8.1ChannelHandler介绍我们对数据的处理都是在ChannelHandler中完成的,Netty提供了众多ChannelHandler的实现类来帮助我们实现一些网络编程中通用功能,比如最常用的心跳检测、数据编解码等。Netty中的ChannelHandler分为两类,一类处......
  • PeneTration Notes(二)
    SNotes-2信息收集给出渗透目标:单位名称、靶标。单位信息首先需要收集单位的基本信息,通过:天眼查:登录后基本服务免费,可以免费查询单层股权穿透信息企查查:爱企查:登录即可免费使用绝大部分服务,但可能信息不全主要需要获取:法定代表人、单位官网、对外邮箱、股权穿透信息主要......
  • 如何把.net应用程序防止他人反编译,dll打包并搭建成一个合格的安装包
    背景知识:在理论上,任何.NET程序集(.dll文件或.exe文件)都可以被反编译。C#是一种托管语言,其代码编译成中间语言(IL)或称为CIL(CommonIntermediateLanguage),然后在.NET运行时中执行。反编译工具可以将IL代码还原回C#源代码,使得原本的C#代码可以被查看和修改。 最......