首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails-4载波不保存通过ajax上传的文件

Rails-4载波不保存通过ajax上传的文件
EN

Stack Overflow用户
提问于 2014-11-12 19:20:24
回答 2查看 745关注 0票数 2

我试图使用ajax上传来上传一个使用Rails载波创业板的文件。

在Rails模型中,如果我注释掉载波上传器,图像将加载

代码语言:javascript
复制
   class Asset < ActiveRecord::Base
     #mount_uploader :attachment, AttachmentUploader                              
   end

下面是当上面的载波被注释掉时的上传保存

代码语言:javascript
复制
   Processing by Api::AssetsController#create as JSON
   Parameters: {"asset"=>{"attachment"=>"C:\\fakepath\\wiz.jpg"}}
   (0.1ms)  begin transaction
   SQL (0.3ms)  INSERT INTO "assets" ("attachment", "created_at", "updated_at") 
   VALUES     (?, ?, ?)  [["attachment", "C:\\fakepath\\wiz.jpg"], 
   ["created_at", "2014-11-12 21:19:50.456924"], 
   ["updated_at", "2014-11-12 21:19:50.456924"]]
   (7.8ms)  commit transaction

然而,当我使用载波上传器时,文件将正确地传递到发送给控制器的参数中,但是,它将保存为nil

代码语言:javascript
复制
     started POST "/api/assets.json" for 127.0.0.1 at 2014-11-12 13:27:59 +0000
       Processing by Api::AssetsController#create as JSON
       Parameters: {"asset"=>{"attachment"=>"C:\\fakepath\\wiz.jpg"}}
       (0.1ms)  begin transaction
       SQL (0.3ms)  INSERT INTO "assets" ("attachment", "created_at", "updated_at")
       VALUES (?, ?, ?)  [["attachment", nil],
       ["created_at", "2014-11-12 13:27:59.814416"],    
       ["updated_at", "2014-11-12 13:27:59.814416"]]
       (7.0ms)  commit transaction

请求头包含多个部分。

代码语言:javascript
复制
Remote Address:127.0.0.1:4200
Request URL:http://localhost:4200/api/assets.json
Request Method:POST
Status Code:200 OK

Accept:*/*
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryX8gWNEUkD4hyVsxz

请求有效负载如下所示:

代码语言:javascript
复制
   ------WebKitFormBoundaryX8gWNEUkD4hyVsxz
   Content-Disposition: form-data; name="asset[attachment]"

   C:\fakepath\wiz.jpg
   ------WebKitFormBoundaryX8gWNEUkD4hyVsxz--

Rails控制器

代码语言:javascript
复制
    class Api::AssetsController < ApplicationController
       def create
         @asset = Asset.new(asset_params)
         @asset.attachment = params[:asset][:attachment]
         if @asset.save
           render json: @asset, status: :ok
         end
        end

        private

       def asset_params
         params.require(:asset).permit(:attachment)                     
       end
    end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-22 12:56:13

我决定不使用HTML-5表单数据来发送表单,而是使用jquery文件上传插件。通过这种改变,载波可以检测到文件上传。

票数 0
EN

Stack Overflow用户

发布于 2014-11-21 12:06:25

老实说,我发现载波比不一致的模型状态属性所带来的麻烦更大,因为当文件第一次上传时,与检索已经上传的文件相比,它们具有不一致的状态属性。卷积和彻头彻尾的复杂性是难以置信的。

我建议您只使用关于上传文件的rails指南。rails控制器非常简单,您可以完全控制您想要做的事情,让队列进行后台处理.任何你想要的。它的好,干净,容易和简单的变化,根据需要。和您一样,我使用Ember和ajax将文件作为多部分表单数据发送,并且它可以工作。

海事组织,许多这些宝石比它们更有价值,因为它们把不同的担忧混为一谈,结果只会把它弄得一团糟。我看不出它们带来的增值。

如果您想要发布处理图像,只需使用您选择的图像处理库(ruby是快速的),如果您想处理CSV文件,只需做您需要做的事情。不需要复杂的变体处理和匹配垃圾,这有一些令人讨厌的排序边缘情况。

如果你真的必须使用载波上传器宝石,那么我很抱歉,我可能没有回答你的问题,但也许我让你考虑了你认为你从中得到了什么真正的价值。

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

https://stackoverflow.com/questions/26894838

复制
相关文章

相似问题

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