【问题标题】:Sending/Uploading Files through APIs - .Net Core通过 API 发送/上传文件 - .Net Core
【发布时间】:2020-11-04 13:06:23
【问题描述】:

我想通过 API 发送文件。服务器将接收文件并将其保存在服务器驱动器上。 问题是我有两个选项可以做到这一点:

  1. 将文件作为字符串读取并在请求正文中发送整个字符串
  2. 使用多部分

有人可以帮助了解使用这两个选项的利弊。

【问题讨论】:

    标签: c# api .net-core asp.net-core-webapi


    【解决方案1】:

    与利弊无关,所以基本上要了解什么是multipart的意思

    多部分请求将一组或多组数据组合成一个 身体,被边界隔开。您通常将这些请求用于 文件上传和在一个单一的传输多种类型的数据 请求(例如,带有 JSON 对象的文件)。

    这意味着多部分包含由边界(随机数)分隔的不同信息部分。

    例如:

    POST /upload HTTP/1.1
    Content-Length: 428
    Content-Type: multipart/form-data; boundary=abcde12345
    --abcde12345
    Content-Disposition: form-data; name="id"
    Content-Type: text/plain
    {...Additional plain content goes here...}
    --abcde12345
    Content-Disposition: form-data; name="address"
    Content-Type: application/json
    {
      "street": "3, Garden St",
      "city": "Hillsbery, UT"
    }
    --abcde12345
    Content-Disposition: form-data; name="profileImage "; filename="image1.png"
    Content-Type: application/octet-stream
    {...file content...}
    --abcde12345--
    

    在此示例中,您可以看到在一个请求中发送的不同内容由边界 [boundary=abcde12345] 分隔。 (纯文本、Json 对象和文件内容)

    这里的文件内容部分用于发送application/octet-stream(二进制或base64格式的字符串)的文件数据,所以基本上你发送的是字符串形式的文件数据 :) 正如您提到的第一点,但您可以包含一些附加信息,可能是要保存的新文件名,上传此文件的用户或您想要的任何内容。

    希望你明白这一点。

    参考: https://swagger.io/docs/specification/describing-request-body/file-upload/ https://swagger.io/docs/specification/describing-request-body/multipart-requests/

    【讨论】:

      【解决方案2】:

      协议级别的唯一区别是多部分/表单数据请求必须遵守RFC 2388,而自定义类型的请求正文可以是任意的。

      使用 Base64 字符串对于上传非常小的单个图像具有优势。它易于处理并且避免了对 Http.IFormFile 的依赖。相反,base64编码的文件比原文件大,需要在服务器端解码。

      【讨论】:

        猜你喜欢
        • 2019-03-09
        • 2019-06-10
        • 1970-01-01
        • 1970-01-01
        • 2019-10-29
        • 2011-04-09
        • 2020-01-14
        • 2021-02-26
        • 2021-07-22
        相关资源
        最近更新 更多