ibms-dome/FrontendWebApi/ApiControllers/FileController.cs
dev02 f094af892a [後端] 修改 下載檔案問題
[前端] 修改前台修改需求問題
2023-05-24 12:58:27 +08:00

86 lines
3.1 KiB
C#

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions;
using Repository.BackendRepository.Interface;
using Repository.FrontendRepository.Interface;
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.IO;
using System.Net;
using System.Web;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http.Features;
using NPOI.HPSF;
namespace FrontendWebApi.ApiControllers
{
public class FileController : MyBaseApiController<GraphManageController>
{
private readonly IBackendRepository backendRepository;
private readonly IFrontendRepository frontendRepository;
private string graphManageFileSaveAsPath = "";
private string operationFileSaveAsPath = "";
public FileController(IBackendRepository backendRepository, IFrontendRepository frontendRepository)
{
this.backendRepository = backendRepository;
this.frontendRepository = frontendRepository;
graphManageFileSaveAsPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "graph_manage");
operationFileSaveAsPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "operation");
}
public ActionResult Download([FromQuery]string type , string savename)
{
var path = "";
if (type == "graph")
{
path = Path.Combine(graphManageFileSaveAsPath, savename);
}
else if (type == "operation")
{
path = Path.Combine(operationFileSaveAsPath, savename);
}
if (System.IO.File.Exists(path) && path != "")
{
try
{
var auth = HttpContext.Request.Headers["Authorization"];
var token = auth.ToString()?.Split("Bearer ")[1];
var jwt = new JwtSecurityTokenHandler().ReadJwtToken(token);
if (jwt == null)
return Unauthorized(HttpStatusCode.Unauthorized);
else if (!System.IO.File.Exists(path))
return NotFound("找不到文件");
var bufferingFeature = HttpContext.Features.Get<IHttpResponseBodyFeature>();
bufferingFeature?.DisableBuffering();
var content = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
var response = File(content, "application/octet-stream");//FileStreamResult
return response;
}
catch (Exception)
{ return null; }
}
else
return null;
}
[HttpPost]
[Route("api/Upload")]
public ActionResult DroZonUplFile()
{
var a = HttpContext.Request.Form.Files;
return Json(new
{
code = "0000",
data = HttpContext.Request.Form.Files
});
}
}
}