当前位置:网站首页>在 ASP.NET Core 中上传文件
在 ASP.NET Core 中上传文件
2022-08-09 00:36:00 【dotNET跨平台】
简介
文件上传是指将媒体文件(本地文件或网络文件)从客户端上传至服务器存储。ASP.NET Core 支持使用缓冲的模型绑定(针对较小文件)和无缓冲的流式传输(针对较大文件)上传一个或多个文件。缓冲和流式传输是上传文件的两种常见方法。
常见方法
缓冲
整个文件将读入一个 IFormFile。 IFormFile
是用于处理或保存文件的 C# 表示形式。
文件上传使用的磁盘和内存取决于并发文件上传的数量和大小。如果应用尝试缓冲过多上传,站点就会在内存或磁盘空间不足时崩溃。如果文件上传的大小或频率会消耗应用资源,请使用流式传输。
会将大于 64 KB 的所有单个缓冲文件从内存移到磁盘的临时文件。
用于较大请求的 ASPNETCORE_TEMP
临时文件将写入环境变量中命名的位置。如果未 ASPNETCORE_TEMP
定义,文件将写入当前用户的临时文件夹。
[HttpPost, DisableRequestSizeLimit]
public ActionResult UploadFile()
{
try
{
var file = Request.Form.Files[0];
const string folderName = "Upload";
var webRootPath = AppDomain.CurrentDomain.BaseDirectory;
var newPath = Path.Combine(webRootPath, folderName);
if (!Directory.Exists(newPath))
{
Directory.CreateDirectory(newPath);
}
if (file.Length > 0)
{
string fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Value;
string fullPath = Path.Combine(newPath, fileName);
using (var stream = new FileStream(fullPath, FileMode.Create))
{
file.CopyTo(stream);
}
Console.WriteLine(fullPath);
}
return Json("Upload Successful.");
}
catch (Exception ex)
{
return Json("Upload Failed: " + ex.Message);
}
}
流式处理
从多部分请求收到文件,然后应用直接处理或保存它。流式传输无法显著提高性能。流式传输可降低上传文件时对内存或磁盘空间的需求。
验证
下面写个方法上传文件验证下
using System;using System.IO;namespace RestSharp.Samples.FileUpload.Client
{
class Program
{
static void Main()
{
var client = new RestClient("http://localhost:5000");
var request = new RestRequest("/api/upload", Method.POST);
const string fileName = "ddd_book.jpg";
var fileContent = File.ReadAllBytes(fileName);
request.AddFileBytes(fileName, fileContent, fileName);
var response = client.Execute(request);
Console.WriteLine($"Response: {response.StatusCode}");
}
}
}
边栏推荐
- Sencha Touch页面跳转创建返回上一级按钮的设计思路
- 神经网络基本原理
- 微信企业号开发之获取AccessToken
- node工具之nodemon
- 轻量级学习网络--ShuffleNet v1:Group conv的改进与channel shuffle的提出
- 4-7 Matplotlib库 箱线图
- 2021江苏省赛
- 登录退出功能
- Unified identity management platform IAM single sign-on process and third-party interface design scheme
- Using MySQL in Ubuntu/Linux environment: Solve the problem of com.mysql.jdbc.PacketTooBigException: Packet for query is too large
猜你喜欢
随机推荐
5-3 Seaborn 分布绘图
4-4 Matplotlib库 直方图
在特征通道提升网络性能 --SENet网络详解
#468. 函数求和
全新Swagger3.0教程,OAS3快速配置指南,实现API接口文档自动化!
Non-major graduates, five-faced Ali: Four rounds of technical + HR have already taken an offer
统一身份管理平台IAM单点登录流程及第三方接口设计方案
IIS发布程序,出现:请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理解决方案
torch.utils.data.DataLoader
手把手教你云服务器如何搭建typecho博客网站(包括配置免费SSL证书)
笔记&代码 | 统计学——基于R(第四版) 第四章随机变量的概率分布
4-7 Matplotlib库 箱线图
【科研-学习-pytorch】2-线性回归
Phoenix的安装配置以及数据处理(详细步骤)
【科研-学习-pytorch】3-分类问题
GaN图腾柱无桥 Boost PFC(单相)三(预测模型)
Pytorch预训练模型和修改——记录
win10出现次磁盘占用率百分之百的情况
Using MySQL in Ubuntu/Linux environment: Solve the problem of com.mysql.jdbc.PacketTooBigException: Packet for query is too large
小G砍树 (换根dp)