代码之家  ›  专栏  ›  技术社区  ›  nullnullnull

Phoenix multipart文件上载导致415种不受支持的媒体类型

  •  0
  • nullnullnull  · 技术社区  · 8 年前

    我正在进行多部分上传。其请求标头如下所示:

    Accept:application/json,text/javascript
    Accept-Encoding:gzip, deflate, br
    Accept-Language:en-US,en;q=0.9
    Connection:keep-alive
    Content-Length:733
    Content-Type:multipart/form-data; boundary=----WebKitFormBoundary9Am5omyM263xjTB2
    Host:localhost:4200
    Origin:http://localhost:4200
    Referer:http://localhost:4200/users/asdf/profile
    User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1
    

    我正在 415 Unsupported Media Type 作为回应。但是,我相信Phoenix配置为接受多部分请求。在我的配置中:

    config :mime, :types, %{
      "application/vnd.api+json" => ["json-api"],
      "multipart/form-data" => ["multipart"]
    }
    

    在我的路由器中:

    plug :accepts, ["json", "json-api", "multipart"]
    

    知道怎么回事吗?我想知道这是否与 Accept-Enconding ?

    2 回复  |  直到 8 年前
        1
  •  1
  •   nullnullnull    8 年前

    原来问题是我通过ja\u序列化程序传递了请求。特别是,由于 this line 。显然,这不是一个json:api请求,所以无论如何都不应该通过管道传递。

        2
  •  0
  •   Cyzanfar    8 年前

    在config/config中配置mime项目之后。exs(例如xml):

    config :mime, :types, %{
      "application/xml" => ["xml"]
    }
    

    然后运行 mix deps.clean --build mime 强制跨所有环境重新编译mime。你现在应该可以走了。

    您可以检查它是否被识别为mime类型,即:

    iex -S mix
    iex> MIME.extensions("application/xml")