403 Not accept, File too large 求解决办法
目标背景:利用表单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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个提示的意思是上传的文件太大了,可以如此检查一下:
1、查看代码是否有使用类似
content-length-range
参数,文件大小超出了这个自定义的范围;2、又拍云空间有如此的限制,文件类空间单个文件不能超过 100M ,图片类空间单个文件不能超过 20M 。