>백엔드 개발 >C#.Net 튜토리얼 >.Net Core 파일 다운로드 구현 예

.Net Core 파일 다운로드 구현 예

黄舟
黄舟원래의
2018-05-15 15:28:197338검색

이 문서에서는 .NetCore 다운로드 파일을 공유합니다. 두 가지 일반적인 다운로드가 있습니다. A 태그는 다운로드 파일 주소와 게시 방법 또는 백그라운드 출력 파일 스트림 요청을 직접 가리킵니다. 2. 도움이 되셨다면 지원해주세요.

  • 사이트에서 콘텐츠 유형을 인식하지 못하는 파일을 다운로드하도록 허용(예: MIME 유형 제한 없이 다운로드)

  • .nupkg 및 .apk 접미사가 포함된 파일 다운로드를 허용하는 방법

  • Razor 템플릿 포스트 다운로드 파일 예시

  • 반년 동안 NetCore를 사용하는 것에 대한 몇 가지 생각과 고민

사이트에서 콘텐츠 유형을 인식하지 않고 파일을 다운로드하도록 허용(예: MIME 유형 제한 없이 다운로드)

netcore의 웹 프로젝트의 경우, 다운로드가 가능한 내장 파일 형식이 몇 가지 있습니다. 먼저 일반 razorweb 프로젝트를 통해 연결하여 Excel을 직접 다운로드하는 예를 살펴보겠습니다. 프로젝트의 wwwroot 디렉터리에 있는 폴더와 해당 디렉터리에 다음 파일이 다운로드에 저장됩니다.

테스트를 통과한 후에는 Excel만

파일이 제한되지 않습니다

를 통해 설정할 수 있습니다.

public

static IApplicationBuilder UseStaticFiles(this IApplicationBuilder app, StaticFileOptions options); 확장을 다음 코드로 수정하면 됩니다.

            app.UseStaticFiles(new StaticFileOptions
            {                //设置不限制content-type
                ServeUnknownFileTypes = true 
            });
그런 다음 작업을 다시 시작하면 됩니다. 아래 스크린샷에 표시된 것처럼 이러한 파일에 액세스하고 다운로드하는 데 문제가 없습니다(현재 어떤 접미사가 있는 파일도 다운로드할 수 있습니다).

Google Chrome에서 cs 접미사가 있는 파일의 경우 여기에는 사진이 없습니다. 관심이 있으시면 시도해 볼 수 있습니다.

.nupkg 및 .apk 접미사가 있는 파일 다운로드를 허용하는 방법

위의 예를 통해

ServeUnknownFileTypes = true;

.nupkg 및 . apk 접미사를 사용하면 다음 코드를 사용하여 다음과 같은 MIME 유형을 추가할 수 있습니다.

app.UseStaticFiles(new StaticFileOptions
            {                //ServeUnknownFileTypes = true 
                ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
                {
                    { ".apk","application/vnd.android.package-archive"},
                    { ".nupkg","application/zip"}
                })
            });
동일한 방법을 사용하여 excel, apk, nupkg 접미사가 있는 파일을 다운로드할 수도 있습니다. http://

localhost:1120/ bak/Startup.cs

는 다운로드한 콘텐츠를 가져오지 않습니다.

.cs 파일에 확장 유형을 추가하지 않았기 때문에 시스템은 직접 404를 반환합니다. 여기서는 FileExtensionContentTypeProvider 객체를 전달합니다. 생성자는 다운로드할 수 있는 콘텐츠 유형 파일을 프로젝트에 알리기 위해 매핑 dic 유형을 전달합니다. Razor 템플릿에 대한 다운로드 후 파일의 예

, 최근 시간이 나면 다음과 같이 Razor 템플릿을 연구하겠습니다. 백엔드에 게시 양식을 통해 파일을 다운로드하도록 요청할 것입니다. login.cshtml 파일의 코드는 바로 아래에 제공됩니다.

@page
@model LoginModel
@{}<form method="post">
    <button type="submit" asp-page-handler="down" class="btn">下载</button>
    <button type="submit" asp-page-handler="down01" class="btn">下载01</button>
    <button type="submit" asp-page-handler="down02" class="btn">下载02</button>
</form>
여기서 주목할 가치가 있습니다. razor는

asp-page-handler=

를 통해 실행됩니다. 백엔드 메소드를 요청하기 위해 그녀가 생성한 최종 HTML 코드가 어떤지 살펴보겠습니다.

요청한 백엔드 메소드가 주로 전달되는 것을 볼 수 있습니다.

handler

를 매개변수 이름으로 통해 아래를 살펴보겠습니다. 백엔드 코드는 다음과 같이 작성됩니다(파일 다운로드를 용이하게 하기 위해 love.apk를 예로 사용합니다).

/// <summary>
        /// 虚拟文件地址输出下载        
        /// </summary>
        /// <returns></returns>
        public IActionResult OnPostDown()
        {            
        var addrUrl = "/bak/love.apk";            
        return File(addrUrl, "application/vnd.android.package-archive", Path.GetFileName(addrUrl));
        }        
        /// <summary>
        /// 文件流的方式输出        /// </summary>
        /// <returns></returns>
        public IActionResult OnPostDown01()
        {            
        var addrUrl = @"D:\F\学习\vs2017\netcore\Study.AspNetCore\WebApp02-1\wwwroot\bak\love.apk";            
        var stream = System.IO.File.OpenRead(addrUrl);            
        return File(stream, "application/vnd.android.package-archive", Path.GetFileName(addrUrl));
        }        
        /// <summary>
        /// 通过HttpClient获取另外站点的文件流,再输出        
        /// </summary>
        /// <returns></returns>
        public async Task<IActionResult> OnPostDown02()
        {            var path = "https://files.cnblogs.com/files/wangrudong003/%E7%89%B9%E4%BB%B701.gif";
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(path);            
            var stream = await client.GetStreamAsync(path);            
            return File(stream, "application/vnd.android.package-archive", Path.GetFileName(path));
        }
세 가지 게시물 승인 방법 백엔드에서는 모두 FileStreamResult

를 사용하여 다운로드한 파일을 출력합니다. 차이점은 파일 소스에 있습니다.

간단한 사이트의 경우 다운로드 파일은 일반적으로 여기의 wwwroot/bak 디렉토리와 다소 유사합니다. ;

파일 보안을 위해 일부 사이트는 일반적으로 웹사이트와 동일한 서버 디스크에 존재하므로, 파일 스트림을 통해 다운로드해야 합니다. 여기에 두 번째 방법을 입력하고 File()에 전달합니다.

마지막 방법은 자신의 다른 사이트나 다른 사람의 사이트에 있는 파일을 전송하여 자신의 파일로 출력하는 것입니다. 이 방법도 razor의 핸들러 매개변수로 사람들이 흔히 부르는

핫링크 방법 중 하나입니다. , 여기서 주목해야 할 점은 백엔드 코드의 OnGetxxx 또는 OnPostxxx 메서드에 있는 xxx 이름에 해당한다는 것입니다. 이는 면도기 요청 사양이며 따라야 합니다.

지난 6개월 동안 NetCore를 사용하면서 느낀 점과 고민

인상:

현재 netcore의 최신 버전 2.0은 제가 지금까지 수행한 여러 프로젝트에서 사용했던 API로 볼 때 매우 강력합니다. 지원은 매우 좋습니다. 제가 만나기 전에 어떤 사람들은 이미지 처리를 위한 API가 있는지 물었습니다. 이제 nuget 패키지 커뮤니티에 이미지 처리를 지원하는 패키지가 많이 있습니다. out https://www.nuget.org/packages; 여러 프로젝트를 진행하면서 netcore의 mvc 프로젝트에 관한 한 mvc 프레임워크를 아는 한 실제로 학습 비용이 높지 않다는 것을 깊이 느꼈습니다. 또는 webform(개인적으로는 면도기에 해당)은 사용하기 쉽습니다. 여기서는 netcore2.0을 감히 시도하지 않거나 배우는 데 비용이 많이 든다고 느끼는 사람들이 시도해 볼 것을 권장합니다. :

netcore2.0이 나온 지 꽤 됐습니다. 이 기간 동안 친구가 많았음에도 불구하고 블로그 정원에서는 git에 대한 많은 관련 기사와 프로젝트를 공유하지만, 여전히 git에서 발생한 문제에 대한 응답이나 제안이 거의 없습니다. 3개 netqq 그룹의 netcore 개발은 물론 사람들을 걱정하게 만들지만, 회사의 기술 의사결정 수준에 있는 일부 사람들도 주목하고 있으며 이를 사용하여 새로운 프로젝트를 시작하고 있습니다. 다른 도시는 모르겠지만 여기 베이징에는 넷코어를 스타트업 프로젝트의 출발점으로 삼는 스타트업이 많이 있습니다. 그래서 아직 방관하고 있는 친구들이나 리더들이 함께 행동에 나서서 협력해 나가면 좋겠습니다. 지역사회의 발전을 촉진합니다.

위 내용은 .Net Core 파일 다운로드 구현 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.