首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上传multipartform-data接口

上传multipartform-data接口
EN

Stack Overflow用户
提问于 2019-01-15 23:52:50
回答 1查看 159关注 0票数 0

我的post控制器在运行以下postman请求时保存Carrierwave @post.picture

代码语言:javascript
复制
def create
  @post = Post.new(post_params) 
  respond_to do |format|
    if @post.save
       # .... all the json/html responses
    end
  end
end

def post_params   
  params.require(:post).permit(:description, :picture)
end

邮递员参数

代码语言:javascript
复制
POST /posts.json
X-User-Email: fg@email.com
X-User-Token: EBNbDysWKEYqURfpDkWo
Accept: application/json
Content-Type: multipart/form-data; boundary=--------------------------329710892316545763789878
undefined:
cache-control: no-cache
Postman-Token: e320b3bf-c5f3-4e40-a149-fd0323881ec0
User-Agent: PostmanRuntime/7.6.0
Host: 192.168.1.104:3000
accept-encoding: gzip, deflate
content-length: 586600
post[picture]=[object Object]post[description]=test
HTTP/1.1 201
status: 201
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Content-Type: application/json; charset=utf-8
Location: http://192.168.1.104:3000/posts/15
ETag: W/"540dd0914ae94bd0214825e73955bbde"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: ad99898b-31db-46e0-8a4d-3fc82dafd1c1
X-Runtime: 128.284019
Transfer-Encoding: chunked
{"id":15,"description":"test","picture": {
    "url":"/uploads/Screenshot_from_2019-01-01_16-10-05.png","thumb":{
         "url":"/uploads/thumb_Screenshot_from_2019-01-01_16-10-05.png"
         },"card":{
         "url":"/uploads/card_Screenshot_from_2019-01-01_16-10-05.png"
         }
    },}

这是从服务器获取的rails参数

代码语言:javascript
复制
{"post"=>
  {"picture"=>
     #<ActionDispatch::Http::UploadedFile
        @tempfile=#<Tempfile:/tmp/RackMultipart20190115-10912-1rryjxd.png>,
        @original_filename="Screenshot from 2019-01-01 16-10-05.png", 
        @content_type="image/png", 
        @headers="Content-Disposition: form-data; name=\"post[picture]\"; filename=\"Screenshot from 2019-01-01 16-10-05.png\"\r\nContent-Type: image/png\r\n">,},}

我通过AJAX对下面的表单数据求和

Rails服务器将参数处理为

代码语言:javascript
复制
{"post"=>{"picture"=> {
  "path"=>"file:///data/user/0/com.surfapp/cache/Camera/9bc15acd-01d2-4539-a930-f129d72c3dcf.jpg", 
  "name"=>"test.png", 
   "type"=>"image/png"
           }
     }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-22 00:31:52

我采用了following solution,但做了几处修改:

我创建了一个继承自ruby类TempfileUpload::Cache类和一个继承自Upload类的Upload::Image类。

回调set_pictureposts controller create action之前触发,在saving之前将镜像添加到@post中。

此功能的Specs coverage

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54202366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档