我有一個控制器,我將在最后包含它的方法。我允許用戶通過我的 POST 方法上傳 .DOC、.DOCX 或 .PDF 檔案。
然后我有一個 GET 方法,我目前可以從中回傳一個檔案,但它被硬編碼為 .PDF。我想知道如何啟用從上述任何檔案型別中讀取的 GET 方法?或者,在將檔案讀入流之前,如何獲取檔案的檔案擴展名?
如果您對我對這兩種方法的方法有任何反饋,歡迎提供反饋!
[HttpGet("Download/{requestId}/{lineNumber}")]
public IActionResult Download([FromRoute] long requestId, [FromRoute] int lineNumber)
{
string fileName = requestId.ToString() lineNumber.ToString();
string fileDownloadName = fileName DateTime.Now.ToString("ddMMyyyy");
try
{
FileStream stream = new(GetFilePath() fileName ".pdf", FileMode.Open);
return File(stream, "application/pdf", fileDownloadName ".pdf");
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpPost("Upload/{requestId}/{lineNumber}")]
public async Task<IActionResult> OnPostUploadAsync(IFormFile formFile, [FromRoute] long requestId, [FromRoute] int lineNumber)
{
try
{
if (formFile.Length > 0)
{
string filename = formFile.FileName;
string filepath = GetFilePath();
string docId = requestId.ToString() lineNumber.ToString();
var supportedTypes = new[] { "doc", "docx", "pdf" };
var fileExt = System.IO.Path.GetExtension(formFile.FileName).Substring(1);
string concessionDocumentPath = filepath "\\" docId "." fileExt;
if (!supportedTypes.Contains(fileExt))
{
string ErrorMessage = "File Extension Is Invalid - Only Upload WORD/PDF File";
return BadRequest(ErrorMessage);
}
if (!System.IO.Directory.Exists(filepath))
{
System.IO.Directory.CreateDirectory(filepath);
}
if (System.IO.File.Exists(concessionDocumentPath))
{
System.IO.File.Delete(concessionDocumentPath);
}
using (FileStream stream = System.IO.File.Create(concessionDocumentPath))
{
await formFile.CopyToAsync(stream);
}
}
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
return Ok(formFile.FileName.ToString() " was uploaded successfully");
}
[NonAction]
private string GetFilePath()
{
return this._environment.WebRootPath "\\Uploads\\ConcessionDocuments\\";
}
uj5u.com熱心網友回復:
我能想到的獲取檔案擴展名的一種方法是
DirectoryInfo di = new DirectoryInfo(GetFilePath());
FileInfo fileInfo = di.GetFiles().FirstOrDefault();
string fileExtension = System.IO.Path.GetExtension(fileInfo.FullName);
你可以在硬編碼部分使用這個擴展。
在這里,我假設您在目錄中只有一個檔案。現在,如果目錄中有多個檔案,請嘗試
searchPattern使用GetFiles.
希望這可以幫助。
uj5u.com熱心網友回復:
感謝@WisdomSeeker 的幫助,我得以找到解決方案。我沒有使用 GetFiles,而是使用了 EnumerateFiles
我懷疑這是最有效或最好的方法,但它可以滿足我的需要。
[HttpGet("Download/{requestId}/{lineNumber}")]
public IActionResult Download([FromRoute] long requestId, [FromRoute] int lineNumber)
{
string fileName = requestId.ToString() lineNumber.ToString();
string fileDownloadName = fileName DateTime.Now.ToString("ddMMyyyy");
string extension = null!;
string mimeType = null!;
string filePath;
try
{
IEnumerable<string> directory = Directory.EnumerateFiles(GetFilePath(), fileName "*");
if (directory.Any())
{
filePath = directory.FirstOrDefault()!;
if (filePath.EndsWith(".pdf"))
{
extension = ".pdf";
mimeType = "application/pdf";
}
else if (filePath.EndsWith(".doc"))
{
extension = ".doc";
mimeType = "application/msword";
}
else if (filePath.EndsWith(".docx"))
{
extension = ".docx";
mimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
}
FileStream stream = new(GetFilePath() fileName extension, FileMode.Open);
return File(stream, mimeType, fileDownloadName extension);
}
else
{
return BadRequest();
}
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/511413.html
上一篇:自定義C#屬性
