[.Net 6]写一个简单的文件上传控件后端

16 篇文章 0 订阅

此项目是配合上一篇文章[Vue]写一个简单的文件上传控件_林 小的博客-CSDN博客

的后端程序,使用.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)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的VB.net程序,可以将hex文件转换为bin文件: ```vb.net Imports System.IO Public Class Form1 Private Sub btnConvert_Click(sender As Object, e As EventArgs) Handles btnConvert.Click '打开Hex文件 Dim hexFile As New StreamReader(txtHexFile.Text) '创建Bin文件 Dim binFile As New BinaryWriter(File.Open(txtBinFile.Text, FileMode.Create)) '读取每一行Hex数据 While Not hexFile.EndOfStream Dim hexData As String = hexFile.ReadLine() '跳过注释行 If Not hexData.StartsWith(":") Then Continue While End If '将Hex数据转换为字节数组 Dim hexBytes As Byte() = Enumerable.Range(0, hexData.Length).Where(Function(x) x Mod 2 = 0).[Select](Function(x) Convert.ToByte(hexData.Substring(x, 2), 16)).ToArray() '计算数据长度和地址 Dim dataLength As Integer = hexBytes(0) Dim address As Integer = (hexBytes(1) << 8) Or hexBytes(2) '将数据入Bin文件 For i As Integer = 0 To dataLength - 1 binFile.Write(hexBytes(i + 4)) Next End While '关闭文件 hexFile.Close() binFile.Close() MessageBox.Show("转换完成!") End Sub Private Sub btnBrowseHex_Click(sender As Object, e As EventArgs) Handles btnBrowseHex.Click '选择Hex文件 If OpenFileDialog1.ShowDialog() = DialogResult.OK Then txtHexFile.Text = OpenFileDialog1.FileName End If End Sub Private Sub btnBrowseBin_Click(sender As Object, e As EventArgs) Handles btnBrowseBin.Click '选择Bin文件 If SaveFileDialog1.ShowDialog() = DialogResult.OK Then txtBinFile.Text = SaveFileDialog1.FileName End If End Sub End Class ``` 该程序需要三个控件:两个文本框用于选择Hex文件和保存Bin文件,一个按钮用于开始转换。在转换过程中,程序将逐行读取Hex文件,并将每一行数据转换为字节数组。然后,程序会计算数据长度和地址,并将数据入Bin文件。最后,程序会关闭文件并显示一个消息框,提示转换已完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林晓lx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值