【问题标题】:Uploading image in .net core web api in better way以更好的方式在.net core web api中上传图像
【发布时间】:2019-11-07 16:38:13
【问题描述】:

我们正在使用 S3 存储桶将图像从 .net core web api 上传到 Amazon Web Services(AWS)。以及我们在 web api 控制器的 Base64 字符串格式的请求正文中收到的图像。

这一切都很好,但是我们在上传图片时遇到了性能问题。因为上传需要很长时间。

我们在收到 Base64 字符串后将其转换为字节数组并将字节数组传递给 aws。我们在请求正文中收到至少 10 张图片。

这些图片基本上是通过使用 ionic/angular js 创建的移动应用发送的。

我们尝试过直接将字节数组从 UI 发送到 web api,但仍然需要相同的时间。除了图片上传,我们还发送表单数据。

因为这些图片每张图片的大小为 6/7 mb。

下面是相同的代码。

public class SafetyController : ControllerBase
    {
        [HttpPost]

        public IActionResult Save([FromBody] SafetyModel safetyModel)
        {
            try
            {
                  SafetyBL safetybl = new SafetyBL();
                  safetybl.Save();

            }

            catch (Exception ex)
            {
               throw ex;
            }
        }
}


public class SafetyModel
    {
        public int Id { get; set; }
        public string SafetyName { get; set; }
        public string SafetyDescription { get; set; }
        public string Location { get; set; }
        public List<Photo> Photos { get; set; }
    }

public class Photo
{
  public string Base64{ get; set; }
}

public class Convert()
{
  Public byte[] ConvertToByteArray(string base64)
    {
        return Convert.FromBase64String(base64);
    }
}

【问题讨论】:

    标签: c# amazon-web-services asp.net-core asp.net-web-api


    【解决方案1】:

    为了获得更好的性能,您需要按照docs 中所述的流式上传文件

    要以更简单的方式实现这一点,请参阅 UploadStream 包。

    尽可能使用流而不是字节数组。我相信 S3 存储桶 SKD 对流有重载

    【讨论】:

    • 但是我们可以使用 base64 方法吗?
    • 我的意思是 api 中的接受参数应该是什么以及它们应该如何从 angular js 传递?
    • 您正在通过 JSON 上传文件,因此您唯一的选择是 base64 编码的字符串或 uint 数组(字节数组的 JS 等效项),因为这些是唯一有效的类型JSON 文档。一般来说,JSON 不是一种可流式传输的格式。为了反序列化 JSON 对象(从而获取文件数据),整个文档必须可用,需要完整上传。如果您想要更好的性能,那么您需要通过multipart/form-data 发送,然后手动从请求正文流中读取(无模型绑定)。
    • @Roman Marusyk 感谢您提供信息。但是,没有详细的信息可以使用 uploadstream 包吗?或者,我正在考虑使用 IFormFile。
    • 为什么不提供详细信息?是的,正如 Cris 所说,您应该使用 IFormFile 来获得更好的性能,但使用我的回答中的流式传输和打包。您仍然可以使用 base64,但通过 multipart/form-data 而不是请求正文
    猜你喜欢
    • 2020-01-14
    • 2021-12-25
    • 1970-01-01
    • 2020-12-22
    • 2020-02-28
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多