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

api上载多部分表单数据

  •  0
  • fabOnReact  · 技术社区  · 6 年前

    post 控制器保存载波波形 @post.picture 当运行下面的 postman 要求

    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
    

    邮递员

    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"
             }
        },}
    

    enter image description here

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

    {"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访问了以下表单数据

    enter image description here

    {"post"=>{"picture"=> {
      "path"=>"file:///data/user/0/com.surfapp/cache/Camera/9bc15acd-01d2-4539-a930-f129d72c3dcf.jpg", 
      "name"=>"test.png", 
       "type"=>"image/png"
               }
         }
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   fabOnReact    6 年前

    我采纳了 following solution 经过一些修改:

    我创建了一个 Upload::Cache Tempfile Upload::Image Upload

    回调函数 set_picture 以前触发过 posts controller create action 并将图像添加到 @post saving

    Specs coverage 对于此功能

    推荐文章