C# RESTAPI:从后端服务器的前端下载文件

C# RESTAPI:从后端服务器的前端下载文件,c#,asp.net,rest,file,download,C#,Asp.net,Rest,File,Download,我已经用JavaSE编写代码很久了。我绝对是ASP.NET核心MVC和RESTAPI的高手。我对其余部分有一个非常基本的了解。我正在处理一个需求,需要将不同类型的文件从文件路径下载到本地文件夹 如果用户检查一个或多个文件,然后单击“下载”,则应将其作为zip文件下载到本地文件夹 我一直在考虑这个问题,但我发现它非常混乱 编辑: 现在我把问题缩小到只下载PDF文件并验证PDF文件 添加到目前为止我为解决这个问题所做的编码工作。现在我被RESTAPI下载文件的请求和响应创建所困扰 控制器类: us

我已经用JavaSE编写代码很久了。我绝对是ASP.NET核心MVC和RESTAPI的高手。我对其余部分有一个非常基本的了解。我正在处理一个需求,需要将不同类型的文件从文件路径下载到本地文件夹

如果用户检查一个或多个文件,然后单击“下载”,则应将其作为zip文件下载到本地文件夹

我一直在考虑这个问题,但我发现它非常混乱

编辑:

现在我把问题缩小到只下载PDF文件并验证PDF文件

添加到目前为止我为解决这个问题所做的编码工作。现在我被RESTAPI下载文件的请求和响应创建所困扰

控制器类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using System.Net.Http;


namespace FileDownloaderService.Controllers
{
    public class FileDownloadController : Controller
    {
        [HttpGet]
    public HttpResponseMessage Get() {
        string filename = "ASPNETCore" + ".pdf";
        string path = @"C:\path_to_file\"+ filename;

        if (System.IO.File.Exists(path)) {
            HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
            var stream = new FileStream(path, FileMode.Open,FileAccess.Read);
            stream.Position = 0;
            response.Content = new StreamContent(stream);
            response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = filename };
            response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf");
            response.Content.Headers.ContentDisposition.FileName = filename;
            return response;
        }
        else
        {
            HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Gone);
            return response;
        }
    }

    }
}
类以查找文件是否为PDF类型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.IO;

namespace FileDownloaderService.Utilities
{
    public class FileMimeType
    {
        //Byte sequence for PDF extensions.
        private static readonly byte[] PDF = { 37, 80, 68, 70, 45, 49, 46 };
        private static readonly string DEFAULT = "application/octet-stream";

        //Method to check the file mime type.
        public static string GetMimeType(byte[] file,string filename) {

            string mime = DEFAULT;

            if (string.IsNullOrWhiteSpace(filename)) {
                return mime;
            }
            string extension = Path.GetExtension(filename) == null ? string.Empty : Path.GetExtension(filename).ToUpper();

            if (file.Take(7).SequenceEqual(PDF)) {
                mime = "application/pdf";
            }

            return mime;
        }
    }
}

我无法根据GET请求下载该文件。请建议。

对问题进行否决投票应该很容易。但是,对于任何一个新手来说,这是一个非常困难的问题。我比你投了更高的票,但你应该自己做一些研究,然后更具体地回答你的问题,因为现在这个问题非常“广泛”。这个问题在这里是离题的,原因有两个:你要求我们推荐一个工具。你实际上是一次问三四个问题。我们不能一次回答所有问题。第一个问题:第二个问题:您只能在服务器上压缩,如何在客户端压缩?第三个问题:通过在下载时传递散列,然后将提供的散列与本地创建的散列进行比较。您好,欢迎使用Stackoverflow。这个问题的问题是在一个问题上问了太多的问题,人们很难帮助你。你有一个任务,你必须把它分解成更小的部分。这对你来说似乎很复杂,因为你试图一次抓住它。这是一个寻求帮助的好地方,但你已经了解了一点应该如何进行。请参阅此-和