【发布时间】:2020-08-05 15:35:18
【问题描述】:
我正在使用项目中的文件夹来上传文件。
[HttpPost, DisableRequestSizeLimit]
public IActionResult Upload()
{
try
{
var file = Request.Form.Files[0];
var folderName = Path.Combine("Resources", "Images");
var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), folderName);
if (file.Length > 0)
{
var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
var fullPath = Path.Combine(pathToSave, fileName);
var dbPath = Path.Combine(folderName, fileName);
using (var stream = new FileStream(fullPath, FileMode.Create))
{
file.CopyTo(stream);
}
return Ok(new { dbPath });
}
else
{
return BadRequest();
}
}
catch (Exception ex)
{
return StatusCode(500, $"Internal server error: {ex}");
}
}
我想知道当我们为客户提供新更新时是否存在丢失这些文件的风险。 如果有更好的解决方案来上传文件并在之后使用 .net core 获取文件链接,请告诉我:)
【问题讨论】:
-
我建议将所有上传代码放在一个服务类中,这样可以更容易测试并且不会使控制器膨胀。此外,如果您要将文件保存到 Web 服务器本身,则仅限于一台 Web 服务器。您可能想查看 azure 存储 blob 和一个数据库来将 url 存储到 blob。将为您复制 Azure 存储 blob,因此您不必担心备份等问题。
-
我想过这个,但公司正在使用 aws,所以我尝试使用 S3 存储桶,但我无法将它用于 web api,因为它没有为您提供指向您的文件的链接只能下载到你的机器上。 (这是我的第一次尝试)如果您知道在 Web 服务中使用 s3 存储桶的方法会很有帮助
-
docs.aws.amazon.com/AmazonS3/latest/dev/HLuploadFileDotNet.html。给定路径和文件,您应该能够通过第二次调用重建完整的 url,例如在第二个答案中:stackoverflow.com/questions/10975475/…