Asp.netコアプロセッシングファイル

1、ファイルのMIMEタイプへのアクセス:FileExtensionContentTypeProvider

参考:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/static-files?view=aspnetcore-3.1

IFileProvider:2は、.NETコアプログラムからファイルを取得します

参考:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/file-providers?view=aspnetcore-3.1

PhysicalFile:3、結果はファイルのアクションメソッドから返されます

参考:https://stackoverflow.com/questions/53631178/invalidoperationexception-on-file-return

4、正しく扱うファイルのダウンロードHTTPヘッダ:PhysicalFile結果は自動的に処理されたASP.NET

参考:https://blog.robotshell.org/2012/deal-with-http-header-encoding-for-file-download/

https://www.cnblogs.com/brucejia/archive/2012/12/24/2831060.html

テストコード:

[ApiController]
[ルート(" [コントローラー] " )]
 パブリック クラスDownloadController:コントローラ
{
    公共DownloadController(IHostEnvironment環境、IFileProvider fileProvider)
    {
        ホスト環境 = 環境。
        プロバイダファイル = ファイルプロバイダ;
    }

    IHostEnvironmentホスト環境。

    IFileProviderファイルプロバイダ;

    [HTTPGET]
    [ルート(" インデックス" )]
     パブリック IActionResultインデックス(文字列のファイル名)
    {
        VARパス= @ " \ TEMP \ " + ファイル名。

        // チェックファイルが存在
        VARをのfileInfo = FileProvider.GetFileInfo(パス);
         IF(fileInfo.PhysicalPath == NULL 
        {
            リターンのコンテンツが(" ファイルが存在しない(" + HostEnvironment.ContentRootPath + " ):" + ファイル名);
        }

        // ファイルの種類のチェック 
        FileExtensionContentTypeProviderプロバイダを= 新しい新しいFileExtensionContentTypeProvider();
         IF(!Provider.TryGetContentType(パス、OUT  文字列のcontentType))
        {
            リターン・コンテンツ(不明なファイルの種類: + fileInfo.PhysicalPath)。
        }

        // リターンがダウンロード
        返すコンテンツ($ " ファイルパス:fileInfo.PhysicalPath {}、MIME :. ContentTypeを{} " );
    }

    [HTTPGET]
    [ルート(" ファイル" )]
     公共 IActionResultファイル(文字列のファイル名)
    {
        VARパス= @ " \ TEMP \ " + ファイル名。

        // チェックファイルが存在
        VARをのfileInfo = FileProvider.GetFileInfo(パス);
         IF(fileInfo.PhysicalPath == NULL 
        {
            リターンのコンテンツが(" ファイルが存在しない(" + HostEnvironment.ContentRootPath + " ):" + ファイル名);
        }

        // ファイルの種類のチェック 
        FileExtensionContentTypeProviderプロバイダを= 新しい新しいFileExtensionContentTypeProvider();
         IF(!Provider.TryGetContentType(パス、OUT  文字列のcontentType))
        {
            リターン・コンテンツ(不明なファイルの種類: + ファイル名);
        }

        // 戻り、ダウンロード
        戻り PhysicalFile(fileInfo.PhysicalPath、contentTypeのは、これはの.xlsxダウンロードするファイルの名前です);
    }
}

Startup.cs

パブリック クラススタートアップ
{
    公共のスタートアップ(IConfiguration構成、IHostEnvironment環境)
    {
        設定 = 設定。
        ホスト環境 = 環境。
    }

    公共 IConfiguration設定{ 取得します}

    公共 IHostEnvironmentホスト環境{ 取得します}

    // このメソッドはランタイムによって呼び出されます。コンテナにサービスを追加するには、このメソッドを使用します。
    公共 のボイドConfigureServices(IServiceCollectionサービス)
    {
        services.AddControllers();

        // ファイルプロバイダー
         // 参考資料:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/file-providers?view=aspnetcore-3.1

        VAR physicalProvider = HostEnvironment.ContentRootFileProvider。
        VAR embeddedProvider = 新しいEmbeddedFileProvider(Assembly.GetEntryAssembly());
        VAR compositeProvider = 新しいCompositeFileProvider(physicalProvider、embeddedProvider)。

        services.AddSingleton <IFileProvider> (compositeProvider)。
    }

    // このメソッドはランタイムによって呼び出されます。HTTPリクエストパイプラインを設定するには、このメソッドを使用します。
    公共の 無効設定(IApplicationBuilderアプリ、IWebHostEnvironment ENV)
    {
        もし(env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(エンドポイント =>
        {
            endpoints.MapControllers();
        });
    }
}

おすすめ

転載: www.cnblogs.com/xwgli/p/12292631.html