2022-11-10 14:34:53 +08:00
|
|
|
|
using Microsoft.AspNetCore.Http;
|
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
|
using Repository.BackendRepository.Interface;
|
|
|
|
|
using Repository.FrontendRepository.Interface;
|
|
|
|
|
using System;
|
2022-12-07 09:25:43 +08:00
|
|
|
|
using System.IdentityModel.Tokens.Jwt;
|
2022-11-10 14:34:53 +08:00
|
|
|
|
using System.IO;
|
2022-12-07 09:25:43 +08:00
|
|
|
|
using System.Net;
|
2022-11-10 14:34:53 +08:00
|
|
|
|
|
|
|
|
|
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 bool Download([FromQuery]string type , string savename, string oriname)
|
|
|
|
|
{
|
|
|
|
|
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
|
|
|
|
|
{
|
|
|
|
|
FileInfo xpath_file = new FileInfo(path); //要 using System.IO;
|
|
|
|
|
|
|
|
|
|
// 將傳入的檔名以 FileInfo 來進行解析(只以字串無法做)
|
|
|
|
|
HttpContext.Response.Clear(); //清除buffer
|
|
|
|
|
HttpContext.Response.ContentType = "application/octet-stream";
|
|
|
|
|
// 檔案類型還有下列幾種"application/pdf"、"application/vnd.ms-excel"、"text/xml"、"text/HTML"、"image/JPEG"、"image/GIF"
|
|
|
|
|
HttpContext.Response.Headers.Add("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(oriname, System.Text.Encoding.UTF8));
|
|
|
|
|
// 考慮 utf-8 檔名問題,以 out_file 設定另存的檔名
|
|
|
|
|
HttpContext.Response.Headers.Add("Content-Length", xpath_file.Length.ToString()); //表頭加入檔案大小
|
|
|
|
|
HttpContext.Response.SendFileAsync(xpath_file.FullName);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{ return false; }
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2022-12-07 09:25:43 +08:00
|
|
|
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
[Route("api/df")]
|
|
|
|
|
public ActionResult DownloadFile(string path, string fileName, string token)
|
|
|
|
|
{
|
|
|
|
|
var jwt = new JwtSecurityTokenHandler().ReadJwtToken(token);
|
|
|
|
|
if (jwt == null)
|
|
|
|
|
return Unauthorized(HttpStatusCode.Unauthorized);
|
|
|
|
|
else if (fileName == null)
|
|
|
|
|
return NotFound("找不到文件");
|
|
|
|
|
|
|
|
|
|
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "excel", path);
|
|
|
|
|
return File(System.IO.File.ReadAllBytes(Path.Combine(filePath, fileName)), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);
|
|
|
|
|
}
|
2022-11-10 14:34:53 +08:00
|
|
|
|
}
|
|
|
|
|
}
|