2015-07-21 74 views
1

我正在尝试为客户端创建一个CMS应用程序。该应用程序目前有一个文件类,可以用回形针上传文件。通过回形针通过外部脚本上传文件

除此之外,我们正在运行一个python脚本,该脚本访问数据库并获取给定事件的一堆信息,创建提案word文档,并在正确的事件下将其上传到数据库。

这一切都有效,但应用程序不识别文档。我如何制作一个能够正确上传文档的Python脚本,以便回形针知道发生了什么?

这里是我的回形针控制器:

def new 
    @event = Event.find(params[:event_id]) 
    @document = Document.new 
end 

def create 
    @event = Event.find(params[:event_id]) 
    @document = @event.documents.new(document_params) 
    if @document.save 
     redirect_to event_path(@event) 
    end 
end 

private 

def document_params 
    params.require(:document).permit(:event_id, :data, :title) 
end 

型号

validates :title, presence: true 
    has_attached_file :data 
    validates_attachment_content_type :data, :content_type => ["application/pdf", "application/msword"] 

这里是Python代码。

f = open(propStr, 'r') 

binary = psycopg2.Binary(f.read()) 

self.cur.execute("INSERT INTO documents (event_id, title, data_file_name, data_content_type) VALUES (%d,'Proposal.doc',%s,'application/msword');" % (self.eventData[0], binary)) 

self.con.commit() 

回答

0

您应该使用Ruby来编写脚本,因为它可以加载任何模型信息或您需要的其他类。

但假设您的要求决定使用python,请注意Paperclip不会将文档存储在您的数据库表中,而只存储文件的元数据。实际的文件默认存储在/ public dir文件系统中(也可能是s3等,具体取决于您的配置)。我会确保你实际上将文件保存到正确的预期目录。根据docs的默认路径是:

:rails_root/public/system/:class/:attachment/:id_partition/:style/:filename 

,所以你将不得不作出另一个SQL查询来检索新记录的ID。我不相信PDF文件有:style属性,因为你不使用imagicmagick调整它们的大小,所以建立一个看起来像这样的路径:

/public/system/documents/data/000/000/123/my_file.pdf 

,并从你的Python脚本保存。