​此项目是配合上一篇文章[Vue]写一个简单的文件上传控件 - 林晓lx - 博客园 (cnblogs.com)

的后端程序,使用.Net 6项目框架搭建,开发前请安装Visual Studio 2022Visual Studio 2022 版本 17.1 发行说明 | Microsoft Docs

这个后端是一个FakeApi,目标是调用文件上传获得File对象。

搭建项目框架

新建一个.Net 6 项目,选择Asp.Net Core Web Api 模板

定义文件模型

 [Serializable]
public class File
{
[Required]
public string FileName { get; set; } public string MimeType { get; set; } public FileType FileType { get; set; } public byte[] Content { get; set; } public Guid? ParentId { get; set; } public long? OwnerUserId { get; set; } public string FileContainerName { get; set; } }

文件类型枚举:1 为文件夹,2 为常规文件

    public enum FileType
{
Directory = 1,
RegularFile = 2
}

编写文件上传功能代码

添加控制器FileController.cs,并键入r

        /// <summary>
/// 上传文件接口
/// </summary>
/// <param name="input">文件上传传输对象</param>
/// <returns></returns>
/// <exception cref="NoUploadedFileException"></exception>
[Route("upload")]
[HttpPost]
[RequestFormLimits(ValueLengthLimit = int.MaxValue, MultipartBodyLengthLimit = long.MaxValue)]
[RequestSizeLimit(long.MaxValue)]
public async Task<bool> ActionCreateAsync([FromForm] CreateFileInput input)
{
//判断是否上传了文件内容
if (input.File == null)
{
throw new NoUploadedFileException();
} var fileName = input.File.FileName; await using var memoryStream = new System.IO.MemoryStream(); //将文件内容复制到流中
await input.File.CopyToAsync(memoryStream); //创建文件类的实体
var file = new File
{
FileContainerName = input.FileContainerName,
FileName = fileName,
MimeType = input.File.ContentType,
FileType = input.FileType,
ParentId = input.ParentId,
OwnerUserId = input.OwnerUserId,
//读取流来获得完整的文件二进制内容
Content = memoryStream.ToArray()
}; Console.WriteLine($"文件名:{file.FileName}", $"文件大小:{file.Content.Length} 字节");
return true; }

注意:

RequestSizeLimit是Asp.Net请求大小限制,默认只有30M。

RequestFormLimits是表单上传的文件长度限制

新建Program.cs文件,键入一下代码

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(options =>
{
options.AddPolicy(name: "default",
policy =>
{
policy.AllowAnyMethod()
.AllowAnyHeader()
.AllowAnyOrigin();
});
});
// Add services to the container. builder.Services.AddControllers(); var app = builder.Build(); app.UseCors("default"); // Configure the HTTP request pipeline. app.UseAuthorization(); app.MapControllers(); app.MapGet("/readme", () => { return "文件上传服务已启动,请post请求至http://localhost:14149/file/upload"; }); app.Run();

 测试

项目根目录运行

dotnet run

上传过的文件将打印在控制台中:

测试已通过

完整代码:

file-uploader-sample/api at master · jevonsflash/file-uploader-sample (github.com)

项目地址:

jevonsflash/file-uploader-sample (github.com)

[.Net 6]写一个简单的文件上传控件后端的更多相关文章

  1. [Vue]写一个简单的文件上传控件

    ​这篇将介绍如何写一个简单的基于Vue+Element的文件上传控件. 控件将具有 1. 上传队列的列表,显示文件名称,大小等信息,可以显示上传进度实时刷新 2. 取消上传 ​ 使用Element的u ...

  2. 用python写一个简单的文件上传

    用Pycharm创建一个django项目.目录如下: <!DOCTYPE html> <html lang="en"> <head> <m ...

  3. Java实现一个简单的文件上传案例

    Java实现一个简单的文件上传案例 实现流程: 1.客户端从硬盘读取文件数据到程序中 2.客户端输出流,写出文件到服务端 3.服务端输出流,读取文件数据到服务端中 4.输出流,写出文件数据到服务器硬盘 ...

  4. jquery文件上传控件 Uploadify

    (转自 http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html) 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同 ...

  5. 使用Uploadify(UploadiFive)多文件上传控件遇到的坑

    最近项目中需要实现多文件上传功能,于是结合需求最终选择了Uploadify这一款控件来实现.相比其他控件,Uploadify具有简洁的界面,功能API基本可以解决大多数需求,又是基于jquery的,配 ...

  6. 在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件(转)

    引言 这两天沉迷了Google SketchUp,刚刚玩够,一时兴起,研究了一下WebBrowser. 我在<WebBrowser控件使用技巧分享>一文中曾谈到过“我现在可以通过WebBr ...

  7. jquery文件上传控件 Uploadify 可以和ajax交互

    http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html  原网址 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同 ...

  8. jquery文件上传控件 Uploadify(转)

    原文:http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上 ...

  9. 因用了NeatUpload大文件上传控件而导致Nonfile portion > 4194304 bytes错误的解决方法

    今天遇到一个问题,就是“NeatUpload大文件上传控件而导致Nonfile portion > 4194304 bytes错误”,百度后发现了一个解决方法,跟大家分享下: NeatUploa ...

  10. 对FileUpload文件上传控件的一些使用方法说明

    //创建时间:2014-03-12 //创建人:幽林孤狼 //说明:FileUpload文件上传控件使用说明(只是部分)已共享学习为主 //可以上传图片,txt文档.doc,wps,还有音频文件,视屏 ...

随机推荐

  1. 从零开始配置vim(19)——终端配置

    在上一篇文章中,我们熟悉了终端模式,并且配置了终端模式的一些操作.但是它总是有那么一点不符合我们的使用习惯.这篇我们将通过强大的插件来完善终端操作的体验. 在介绍插件之前让我们先回退到上一个版本,我们 ...

  2. MongoDB 选型介绍

    什么是 MongoDB 前言 MongoDB 的主要特性 MongoDB 对比关系型数据库 MySQL 什么时候考虑 MongoDB 参考 什么是 MongoDB 前言 MongoDB 是一个开源.高 ...

  3. 内存泄漏定位工具之 mtrace(二)

    1 前言 mtrace(memory trace),是 GNU Glibc 自带的内存问题检测工具,它可以用来协助定位内存泄露问题.它的实现源码在glibc源码的malloc目录下,其基本设计原理为设 ...

  4. java bean 慎用 is开头isXxx开头的属性,若必须得用,那么一定要记得 idea自动生成的 setter 和 getter会不标准,从而会引起问题,他自动生成后,需要手工再次进行修改,才可使用,要不然有可能引起各种问题

    直接上例子: 然后用 Idea 自动生成 getter 和 setter public class XyzBean { //最普通的 private String name; //Boolean类型, ...

  5. IntelliJ IDEA 查看一个接口的实现类。

  6. 利用ogg实现oracle到kafka的增量数据实时同步

    前言 ogg即Oracle GoldenGate是Oracle的同步工具,本文讲如何配置ogg以实现Oracle数据库增量数据实时同步到kafka中,其中同步消息格式为json. 下面是我的源端和目标 ...

  7. 通过程序自动设置网卡的“internet共享”选项

    操作系统 : Windows 10_x64 [版本 10.0.19042.685] Windows下可以通过网卡共享进行上网,但是需要在网卡的属性里面进行设置,需要在视窗界面进行操作,不能实现自动化. ...

  8. OGP协议的使用

    OGP协议是一套Metatags的规格,用来标注页面,告诉我们你的网页快照.帮助社交app高效并准确的获取网页中的核心链接.标题.主图.正文摘要等信息,使得该网页在社交分享中有更好的展现体验. 如果网 ...

  9. 【Unity3D】UGUI之Dropdown

    1 Dropdown属性面板 ​ 在 Hierarchy 窗口右键,选择 UI 列表里的 Dwondown (下拉列表)控件,即可创建 Dwondown 控件,选中创建的 Dwondown 控件,按键 ...

  10. updatedb命令

    updatedb命令 updatedb创建或更新locate命令使用的数据库,如果数据库已经存在,则重用其数据以避免重新读取未更改的目录,updatedb通常由cron每天运行以更新默认数据库. 语法 ...