/// <summary>
/// 下载API
/// </summary>
/// <param name="fileModel"></param>
/// <returns></returns>
[HttpPost("DownloadFile")]
//[ServiceFilter(typeof(ValidateCookieDataAttribute))]
public IActionResult DownloadFile([FromBody] DownloadFileParams fileModel)//DownloadFileParams我自己定义的一个类
{
try
{
if (System.IO.File.Exists(fileModel.Server_Path))//Server_Path服务器求解器文件路径
{
var memoryStream = new MemoryStream();
using (var stream = new FileStream(fileModel.Server_Path, FileMode.Open))
{
stream.CopyTo(memoryStream);
}
memoryStream.Position = 0;
return File(memoryStream, "application/octet-stream", Path.GetFileName(fileModel.Server_Path));
}
else
{
return StatusCode(500, $"The server file path does not exist.");
}
}
catch (Exception ex)
{
return StatusCode(500, $"Internet Error Message: {ex.Message}");
throw;
}
}
/// <summary>
/// 文件下载参数
/// </summary>
public class DownloadFileParams
{
/// <summary>
/// 服务器文件路径
/// </summary>
public string Server_Path { get; set; }
/// <summary>
/// 用户名
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 用户Token
/// </summary>
public string UserToken { get; set; }
/// <summary>
/// 要下载的文件名字
/// </summary>
public string FileName { get; set; }
}
//过滤器自己看着验证就行了保证不被恶意请求就行
public class ValidateCookieDataAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
try
{
//检查请求中是否包含Token数据
DownloadFileParams fileModel = context.ActionArguments["fileModel"] as DownloadFileParams;
//三次验证
if (fileModel == null)//fileModel对象验证
{
context.Result = new BadRequestObjectResult("Invalid file model. Please provide valid data.");
return;
}
if (string.IsNullOrEmpty(fileModel.UserName) || string.IsNullOrEmpty(fileModel.UserToken))//属性验证
{
context.Result = new BadRequestObjectResult("UserName and UserToken are required fields.");
return;
}
//Token验证
Member checkuser = G.Server.CheckUser(fileModel.UserName, fileModel.UserToken);
if (checkuser.ID == 0)
{
context.Result = new BadRequestObjectResult("User Token Verification Failed.");
return;
}
// 继续执行下一个过滤器或者动作方法
base.OnActionExecuting(context);
}
catch (Exception)
{
context.Result = new StatusCodeResult(500);
throw;
}
}
}
自己在Stratup.cs注册一下就行了。