403 Not accept, File too large 求解决办法

发布于 2022-08-28 12:34:45 字数 2099 浏览 10 评论 0

目标背景:利用表单api提升iphone客户端图片上传速度
代码背景:rails grape(0.2.2,api gem)

利用页面测试接口时是正常的,以下是上传参数:

Parameters: {
    "file"=>#<ActionDispatch::Http::UploadedFile:0x000000086b9768
        @original_filename="1.png",
        @content_type="image/png",
        @headers="Content-Disposition: form-data;name=\"file\";filename=\"1.png\"\r\nContent-Type: image/png\r\n",
        @tempfile=#<File:/tmp/RackMultipart20140421-5055-d4ndp1>
    >
}

但通过api(我们自己的)接口上传图片时会发生如标题错误,上传参数为:

Parameters: {
    "file"=>{
        :filename=>"1.png",
        :type=>"image/png",
        :name=>"file",
        :tempfile=>#<File:/tmp/RackMultipart20140421-5080-fnkir0>,
        :head=>"Content-Disposition: form-data;name=\"file\";filename=\"1.png\"\r\nContent-Type: image/png\r\n"
    }
}

核心代码

def self.upyun_form_post(opts={})
    form_api_key = Setting.upyun_form_api_key
    opts[:prefix] ||= ""
    opts[:allow_exts] ||= "jpg,jpeg,gif,png"
    opts[:min_length] ||= 0
    opts[:max_length] ||= 10000.kilobyte
    opts[:unsharp] ||= false
    opts[:quality] ||= 95
    hash = {
      "bucket" => Setting.upyun_bucket,
      "expiration" => 20.minutes.since.to_i,
      "save-key" => [opts[:prefix],"photo/image/{filemd5}{.suffix}"].join("/"),
      "allow-file-type" => opts[:allow_exts],
      "content-length-range" => "#{opts[:min_length].to_i},#{opts[:max_length].to_i}",
      "x-gmkerl-unsharp" => opts[:unsharp],
      "x-gmkerl-quality" => opts[:quality].to_i
    }
    policy = Base64.encode64(hash.to_json).gsub("\n","")
    sign = Digest::MD5.hexdigest([policy,form_api_key].join("&"))
    url = "http://v0.api.upyun.com/#{Setting.upyun_bucket}"

    response = JSON.parse(RestClient.post(url,:policy => policy, :signature => sign, :file => opts[:file]))
    if response["code"] == 200
      return response["url"].sub("/photo/image/","")
    else
      return nil
    end
  end

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

那片花海 2022-09-04 12:34:45

这个提示的意思是上传的文件太大了,可以如此检查一下:
1、查看代码是否有使用类似 content-length-range 参数,文件大小超出了这个自定义的范围;
2、又拍云空间有如此的限制,文件类空间单个文件不能超过 100M ,图片类空间单个文件不能超过 20M 。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文