C# RESTAPI:从后端服务器的前端下载文件
我已经用JavaSE编写代码很久了。我绝对是ASP.NET核心MVC和RESTAPI的高手。我对其余部分有一个非常基本的了解。我正在处理一个需求,需要将不同类型的文件从文件路径下载到本地文件夹 如果用户检查一个或多个文件,然后单击“下载”,则应将其作为zip文件下载到本地文件夹 我一直在考虑这个问题,但我发现它非常混乱 编辑: 现在我把问题缩小到只下载PDF文件并验证PDF文件 添加到目前为止我为解决这个问题所做的编码工作。现在我被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
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。这个问题的问题是在一个问题上问了太多的问题,人们很难帮助你。你有一个任务,你必须把它分解成更小的部分。这对你来说似乎很复杂,因为你试图一次抓住它。这是一个寻求帮助的好地方,但你已经了解了一点应该如何进行。请参阅此-和