欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET Core單文件和多文件上傳并保存到服務(wù)端的方法

 更新時間:2020年04月07日 09:34:57   作者:追逐時光  
這篇文章主要介紹了ASP.NET Core單文件和多文件上傳并保存到服務(wù)端的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言:

  在我們?nèi)粘i_發(fā)中,關(guān)于圖片,視頻,音頻,文檔等相關(guān)文件上傳并保存到服務(wù)端中是非常常見的一個功能,今天主要是把自己在開發(fā)中常用的兩種方式記錄下來方便一下直接使用,并且希望能夠幫助到有需要的同學!

一、配置ASP.NET Core中的靜態(tài)文件:

簡單概述:

  在ASP.NET Core應(yīng)用中靜態(tài)資源文件需要進行相應(yīng)的配置才能夠提供給客戶端直接使用。

詳情描述請參考官方文檔:
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/static-files?view=aspnetcore-3.1

簡單配置,提供 Web 根目錄內(nèi)的文件:

調(diào)用 Startup.Configure中的UseStaticFiles 方法配置:

public void Configure(IApplicationBuilder app)
{
  app.UseStaticFiles();
}

二、文件服務(wù)器和應(yīng)用程序配置(IIS,Kestrel):

詳情描述,請參考官方文檔說明:
https://docs.microsoft.com/zh-cn/aspnet/core/mvc/models/file-uploads?view=aspnetcore-3.1#server-and-app-configuration

多部分正文長度限制:

MultipartBodyLengthLimit 設(shè)置每個多部分正文的長度限制。 分析超出此限制的窗體部分時,會引發(fā) InvalidDataException。 默認值為 134,217,728 (128 MB)。 使用 MultipartBodyLengthLimit 中的 Startup.ConfigureServices 設(shè)置自定義此限制:

public void ConfigureServices(IServiceCollection services)
{
  services.Configure<FormOptions>(options =>
  {
    // Set the limit to 256 MB
    options.MultipartBodyLengthLimit = 268435456;
  });
}

Kestrel 最大請求正文大小:

對于 Kestrel 托管的應(yīng)用,默認的最大請求正文大小為 30,000,000 個字節(jié),約為 28.6 MB。 使用 MaxRequestBodySize Kestrel 服務(wù)器選項自定義限制:

public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
    .ConfigureKestrel((context, options) =>
    {
      // Handle requests up to 50 MB
      options.Limits.MaxRequestBodySize = 52428800;
    })
    .ConfigureWebHostDefaults(webBuilder =>
    {
      webBuilder.UseStartup<Startup>();
    });

IIS 內(nèi)容長度限制:

默認的請求限制 (maxAllowedContentLength) 為 30,000,000 字節(jié),大約 28.6 MB。 請在 web.config 文件中自定義此限制:

<system.webServer>
 <security>
  <requestFiltering>
   <!-- Handle requests up to 50 MB -->
   <requestLimits maxAllowedContentLength="52428800" />
  </requestFiltering>
 </security>
</system.webServer>

三、單文件上傳:

using System;
using System.IO;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;

namespace FileUploadManage.Controllers
{
  /// <summary>
  /// 圖片,視頻,音頻,文檔等相關(guān)文件通用上傳服務(wù)類
  /// </summary>
  public class FileUploadController : Controller
  {
    private static IHostingEnvironment _hostingEnvironment;

    public FileUploadController(IHostingEnvironment hostingEnvironment)
    {
      _hostingEnvironment = hostingEnvironment;
    }

    /// <summary>
    /// 單文件上傳
    /// </summary>
    /// <returns></returns>
    public JsonResult SingleFileUpload()
    {
      var formFile = Request.Form.Files[0];//獲取請求發(fā)送過來的文件
      var currentDate = DateTime.Now;
      var webRootPath = _hostingEnvironment.WebRootPath;//>>>相當于HttpContext.Current.Server.MapPath("") 

      try
      {
        var filePath = $"/UploadFile/{currentDate:yyyyMMdd}/";

        //創(chuàng)建每日存儲文件夾
        if (!Directory.Exists(webRootPath + filePath))
        {
          Directory.CreateDirectory(webRootPath + filePath);
        }

        if (formFile != null)
        {
          //文件后綴
          var fileExtension = Path.GetExtension(formFile.FileName);//獲取文件格式,拓展名

          //判斷文件大小
          var fileSize = formFile.Length;

          if (fileSize > 1024 * 1024 * 10) //10M TODO:(1mb=1024X1024b)
          {
            return new JsonResult(new { isSuccess = false, resultMsg = "上傳的文件不能大于10M" });
          }

          //保存的文件名稱(以名稱和保存時間命名)
          var saveName = formFile.FileName.Substring(0, formFile.FileName.LastIndexOf('.'))+"_"+currentDate.ToString("HHmmss")+ fileExtension;

          //文件保存
          using (var fs = System.IO.File.Create(webRootPath + filePath + saveName))
          {
            formFile.CopyTo(fs);
            fs.Flush();
          }

          //完整的文件路徑
          var completeFilePath = Path.Combine(filePath, saveName);

          return new JsonResult(new { isSuccess = true, returnMsg = "上傳成功", completeFilePath = completeFilePath });
        }
        else
        {
          return new JsonResult(new { isSuccess = false, resultMsg = "上傳失敗,未檢測上傳的文件信息~" });
        }

      }
      catch (Exception ex)
      {
        return new JsonResult(new { isSuccess = false, resultMsg = "文件保存失敗,異常信息為:" + ex.Message });
      }
    }

  }
}

四、多文件上傳:

using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Internal;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore.Internal;

namespace FileUploadManage.Controllers
{
  /// <summary>
  /// 圖片,視頻,音頻,文檔等相關(guān)文件通用上傳服務(wù)類
  /// </summary>
  public class FileUploadController : Controller
  {
    private static IHostingEnvironment _hostingEnvironment;

    public FileUploadController(IHostingEnvironment hostingEnvironment)
    {
      _hostingEnvironment = hostingEnvironment;
    }

    /// <summary>
    /// 多文件上傳
    /// </summary>
    /// <param name="formCollection">表單集合值</param>
    /// <returns>服務(wù)器存儲的文件信息</returns>

    public JsonResult MultiFileUpload(IFormCollection formCollection)
    {
      var currentDate = DateTime.Now;
      var webRootPath = _hostingEnvironment.WebRootPath;//>>>相當于HttpContext.Current.Server.MapPath("") 
      var uploadFileRequestList = new List<UploadFileRequest>();
      try
      {
        //FormCollection轉(zhuǎn)化為FormFileCollection
        var files = (FormFileCollection)formCollection.Files;

        if (files.Any())
        {
          foreach (var file in files)
          {
            var uploadFileRequest = new UploadFileRequest();

            var filePath = $"/UploadFile/{currentDate:yyyyMMdd}/";

            //創(chuàng)建每日存儲文件夾
            if (!Directory.Exists(webRootPath + filePath))
            {
              Directory.CreateDirectory(webRootPath + filePath);
            }

            //文件后綴
            var fileExtension = Path.GetExtension(file.FileName);//獲取文件格式,拓展名

            //判斷文件大小
            var fileSize = file.Length;

            if (fileSize > 1024 * 1024 * 10) //10M TODO:(1mb=1024X1024b)
            {
              continue;
            }

            //保存的文件名稱(以名稱和保存時間命名)
            var saveName = file.FileName.Substring(0, file.FileName.LastIndexOf('.')) + "_" + currentDate.ToString("HHmmss") + fileExtension;

            //文件保存
            using (var fs = System.IO.File.Create(webRootPath + filePath + saveName))
            {
              file.CopyTo(fs);
              fs.Flush();
            }

            //完整的文件路徑
            var completeFilePath = Path.Combine(filePath, saveName);

            uploadFileRequestList.Add(new UploadFileRequest()
            {
              FileName = saveName,
              FilePath = completeFilePath
            });
          }
        }
        else
        {
          return new JsonResult(new { isSuccess = false, resultMsg = "上傳失敗,未檢測上傳的文件信息~" });
        }
      }
      catch (Exception ex)
      {
        return new JsonResult(new { isSuccess = false, resultMsg = "文件保存失敗,異常信息為:" + ex.Message });
      }

      if (uploadFileRequestList.Any())
      {
        return new JsonResult(new { isSuccess = true, returnMsg = "上傳成功", filePathArray = uploadFileRequestList });
      }
      else
      {
        return new JsonResult(new { isSuccess = false, resultMsg = "網(wǎng)絡(luò)打瞌睡了,文件保存失敗" });
      }
    }

  }

  /// <summary>
  /// 對文件上傳響應(yīng)模型
  /// </summary>
  public class UploadFileRequest
  {
    /// <summary>
    /// 文件名稱
    /// </summary>
    public string FileName { get; set; }

    /// <summary>
    /// 文件路徑
    /// </summary>
    public string FilePath { get; set; }
  }
}

到此這篇關(guān)于ASP.NET Core單文件和多文件上傳并保存到服務(wù)端的方法的文章就介紹到這了,更多相關(guān)ASP.NET Core文件上傳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

作者:追逐時光

作者簡介:一個熱愛編程,善于分享,喜歡學習、探索、嘗試新事物,新技術(shù)的程序猿。

相關(guān)文章

  • 如何在Asp.Net Core中集成Refit

    如何在Asp.Net Core中集成Refit

    這篇文章主要介紹了如何在Asp.Net Core中集成Refit,幫助大家更好的理解和學習使用Asp.Net Core,感興趣的朋友可以了解下
    2021-03-03
  • asp.net core 跨域配置不起作用的原因分析及解決方案

    asp.net core 跨域配置不起作用的原因分析及解決方案

    在ASP.NET Core中配置跨域時,正確的中間件順序至關(guān)重要,否則可能導致跨域無效,此外,如果同時使用中間件和屬性來啟用跨域,需要確保策略名稱一致,文章提供了官方簡單啟用跨域的示例代碼,幫助開發(fā)者避免常見的配置錯誤
    2024-10-10
  • .net開發(fā)中幾個重要的認識誤區(qū)小結(jié)

    .net開發(fā)中幾個重要的認識誤區(qū)小結(jié)

    .net如今已經(jīng)很流行,成為趕時髦的程序員的首選。但是,大量剛剛接觸.net的程序員的確存在一定的認識誤區(qū),這里先介紹一部分。
    2010-04-04
  • Ajax.net 顯示錯誤信息的設(shè)置

    Ajax.net 顯示錯誤信息的設(shè)置

    有時候我們在使用asp.net想讓他顯示出錯的原因等情況,大家可以仔細看下參數(shù),屬性等
    2009-01-01
  • ASP.NET?Core使用EF查詢數(shù)據(jù)

    ASP.NET?Core使用EF查詢數(shù)據(jù)

    這篇文章介紹了ASP.NET?Core使用EF查詢數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#.NET發(fā)送郵件的實例代碼

    C#.NET發(fā)送郵件的實例代碼

    這篇文章介紹了C#.NET發(fā)送郵件的實例代碼,有需要的朋友可以參考一下,希望對你有所幫助
    2013-07-07
  • C# 解析 RAS文件 SUM 光柵文件圖象的代碼

    C# 解析 RAS文件 SUM 光柵文件圖象的代碼

    C#解析RAS文件(SUM 光柵文件圖象) 我只實現(xiàn)了24位色和8位色 這個結(jié)構(gòu)也太簡單了。只有文件頭和數(shù)據(jù)區(qū) 。
    2010-03-03
  • .net 彈出消息框后導致頁面樣式變亂解決方法

    .net 彈出消息框后導致頁面樣式變亂解決方法

    點擊按鈕,執(zhí)行提交操作,彈出消息框后,頁面的樣式變亂,已經(jīng)確定了不是css樣式的問題,接下來與大家共同探討下究竟是什么問題導致頁面變亂
    2013-04-04
  • ASP.NET訪問共享文件夾的詳細步驟

    ASP.NET訪問共享文件夾的詳細步驟

    這篇文章主要介紹了ASP.NET訪問共享文件夾的詳細步驟,有需要的朋友可以了解一下。
    2016-10-10
  • 防止.NET應(yīng)用多實例運行的有效方法

    防止.NET應(yīng)用多實例運行的有效方法

    在開發(fā)桌面應(yīng)用程序時,可能會遇到這樣一種需求:限制程序只能同時運行一個實例,如果用戶試圖再次啟動同一個程序,應(yīng)該將已經(jīng)運行的程序窗口置于前臺而不是啟動一個新實例,這篇文章提供了一種通過檢測當前程序?qū)嵗⒓せ钜堰\行實例的方法,需要的朋友可以參考下
    2024-12-12

最新評論