首页 > 其他分享 >.net core上传文件、.net core接收文件上传

.net core上传文件、.net core接收文件上传

时间:2024-03-26 10:35:46浏览次数:26  
标签:core 文件 file var new net 上传 byte

我要做一个winform程序,上传文件到.net8的文件上传接口
winform

/// <summary>
/// 选择图片上传
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void btnExtract_Click(object sender, EventArgs e)
{
    try
    {
        var fileDialog = new OpenFileDialog();//创建打开页面
        fileDialog.Multiselect = false;//不开启多选
        fileDialog.Title = "请选择图片";//设置标题
        fileDialog.Filter = "images|*.png|images|*.jpg|images|*.gif|images|*.jpeg|images|*.bmp";//文件格式
        if (fileDialog.ShowDialog() == DialogResult.OK)
        {
            btnExtract.Enabled = false;
            string filePath = fileDialog.FileName;//原始图片路径C:\Users\jay.star\Desktop\02.png
            var ext = Path.GetExtension(filePath);//.png
            var fdir = Path.GetDirectoryName(filePath);//C:\Users\jay.star\Desktop\
            var fileName = Path.GetFileName(filePath);//02.png
            byte[] fileBytes = Utils.GetFileBytes(filePath);//文件转byte[]//上传接口地址
            string serverUrl = "http://192.168.9.29:32831/Upload/UploadFiles";            //多个文件时,重复多次添加到content中。
            //fileContent的Headers信息中的Name必须要和接口参数的名字一样。
            var fileContent = new ByteArrayContent(fileBytes);
            fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
            {
                Name = "file",
                FileName = fileName,
            };

            //var fileContent2 = new ByteArrayContent(fileBytes);
            //fileContent2.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
            //{
            //    Name = "file",
            //    FileName = fileName,
            //};

            var content = new MultipartFormDataContent();
            content.Add(fileContent);
            //content.Add(fileContent2);

            var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, serverUrl);
            httpRequestMessage.Content = content;
            var httpClient = new HttpClient();
            var httpResponseMessage = httpClient.SendAsync(httpRequestMessage).Result;
            if (httpResponseMessage.IsSuccessStatusCode)
            {
                using (var contentStream = await httpResponseMessage.Content.ReadAsStreamAsync())
                {
                    using (StreamReader sw = new StreamReader(contentStream))
                    {
                        string res2 = sw.ReadToEnd();
                        txtRes.Text += "\n" + "结果:" + res2;
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        txtRes.Text = ex.ToString();
    }
    btnExtract.Enabled = true;
}

.net8接口

/// <summary>
/// http://192.168.9.29:32831/Upload/UploadFiles
/// 多个文件:IFormFileCollection file
/// 单个文件:IFormFile file
/// 参数名字:file,必须和参数一致
/// </summary>
/// <returns></returns>
[HttpPost]
public JsonResult UploadFiles(IFormFileCollection file)
{
    ApiResult<List<string>> result = new ApiResult<List<string>>()
    {
        data = new List<string>(),
        errorCode = "0",
        message = "success"
    };
    try
    {
        var webRootPath = this.env.ContentRootPath;//获取项目路径
        var files2 = HttpContext.Request.Form.Files;//也可以使用这种来获取文件列表
        var pathList = Utils.UploadFiles(webRootPath, file);
        result.data = pathList;
    }
    catch (Exception ex)
    {
        result.errorCode = "-1";
        result.message = ex.Message;
    }
    return new JsonResult(result);
}

保存文件

/// <summary>
/// 上传文件
/// E:\Demos\XCGWebApp\UploadFile\
/// </summary>
/// <param name="webRootPath">系统目录</param>
/// <param name="files">文件列表</param>
public static List<string> UploadFiles(string webRootPath, IFormFileCollection files)
{
    List<string> filesPathList = new List<string>();
    var fileDir = $"UploadFile\\";
    var dirPath = Path.Combine(webRootPath, fileDir);
    if (!Directory.Exists(dirPath))
    {
        Directory.CreateDirectory(dirPath);
    }
    long timeStamp = (long)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
    foreach (var file in files)
    {
        var fname = timeStamp + "_" + file.FileName;
        var fileExtension = Path.GetExtension(file.FileName);// 文件后缀
        var fileSize = file.Length;// 文件大小 1024 * 1024 * 10 = 10M
        string filePath = dirPath + fname;
        using (FileStream fs = File.Create(filePath))
        {
            file.CopyTo(fs);
            fs.Flush();
        }
        filesPathList.Add("UploadFile/" + fname);
    }
    return filesPathList;
}

文件转byte[]

/// <summary>
/// 将文件转换成byte[] 数组
/// </summary>
/// <param name="fileUrl">文件路径文件名称</param>
/// <returns>byte[]</returns>
public static byte[] GetFileBytes(string fileUrl)
{
    using (FileStream fs = new FileStream(fileUrl, FileMode.Open, FileAccess.Read))
    {
        byte[] buffur = new byte[fs.Length];
        fs.Read(buffur, 0, (int)fs.Length);
        return buffur;
    }
}

 

标签:core,文件,file,var,new,net,上传,byte
From: https://www.cnblogs.com/xsj1989/p/18096021

相关文章

  • As a reader --> On the Robustness of ML-Based Network Intrusion Detection System
    ......
  • As a reader --> Deep PackGen: A Deep Reinforcement Learning Framework for Adversa
    ......
  • .NET分布式Orleans - 4 - 计时器和提醒
    Timer是什么Timer是一种用于创建定期粒度行为的机制。与标准的.NETSystem.Threading.Timer类相似,Orleans的Timer允许在一段时间后执行特定的操作,或者在特定的时间间隔内重复执行操作。它在分布式系统中具有重要作用,特别是在处理需要周期性执行的任务时非常有用。Timer......
  • Profinet转Modbus网关的调试与故障排除教程
    Profinet转Modbus网关(XD-MDPN100)带有网口和串口很大限度地解决了设备接口不统一的问题,支持485和232,可以实现从Modbus通信协议到Profinet通信协议的无缝转换,为不同协议之间的互联互通提供了便利。Profinet转Modbus网关(XD-MDPN100)的调试与故障排除教程通常涉及一系列步骤来确保网......
  • Fastapi和requests文件的下载和上传
     介绍FastApi搭建一个简单下载和上传的服务,通过接口将文件保存在服务器上,而通过requests库子在本机中批量从服务器上传和下载文件FastApi搭建服务#application.py"""fastapi+request上传和下载功能"""fromfastapiimportFastAPI,UploadFilefromfastapi.respon......
  • Kubernetes网络原理
    Kubernetes的网络依赖于Docker,Docker的网络又离不开Linux操作系统内核特性的支持,所以在学习Kubernetes网络原理之前,有必要先深入了解Docker相关的网络基础知识,以及Docker的网络实现原理,详见《Docker的Linux网络基础》与《Docker网络原理》。 一、Kubernetes网......
  • openwrt netdata 温度监控
    1、安装timeout:opkginstallcoreutils-timeout2、进入/etc/netdata3、使用./edit-configcharts.d.conf来编辑配置文件,这个edit-config等于是一个配置工具能够从/usr/lib拉取默认配置过来,在配置里最后加入sensors=force。不加一定不会有温度,原因未知。4、用/usr/lib/netdata/p......
  • 论文解读(UDA-GCN)《Unsupervised Domain Adaptive Graph Convolutional Networks》
    Note:[wechat:Y466551|可加勿骚扰,付费咨询]论文信息论文标题:UnsupervisedDomainAdaptiveGraphConvolutionalNetworks论文作者:论文来源:2020aRxiv论文地址:download 论文代码:download视屏讲解:click1-摘要图卷积网络(GCNs)在许多与图相关的分析任务中都取得了令人印......
  • Kubernetes知识整理
    Kubernetes知识整理Kubernetes组件Kubernetes由多个组件组成,共同协作以管理容器化应用程序。这些组件可以分为以下几类:控制平面组件API服务器(kube-apiserver):KubernetesAPI的入口点,负责处理来自客户端的请求并协调集群状态。调度器(kube-scheduler):负责将Pod分配......
  • 记一次 .NET某半导体CIM系统 崩溃分析
    一:背景1.讲故事前些天有一位朋友在公众号上找到我,说他们的WinForm程序部署在20多台机器上,只有两台机器上的程序会出现崩溃的情况,自己找了好久也没分析出来,让我帮忙看下怎么回事,就喜欢这些有点调试基础的,dump也不需要我指导怎么去抓,接下来我们就上windbg开始分析吧。二:WinDbg分......