现在它是这样工作的:我上传一个文件,文件保存后,函数(do_picture_analysis)调用R并生成一个直方图(最简单的版本,在更复杂的版本2包必须安装在R中),图片直方图被保存。问题是,如果我想上传 50 个文件,在 R 中分别为每个文件加载 2 个包需要花费大量时间(after_save 回调)。
我需要什么:我上传一个文件,保存文件,单击“直方图”按钮,然后对数据库中的所有文件调用 do_picture 分析函数(如果某些文件已经分析过,则无关紧要)
所以我只需要知道如何在按钮和函数调用之间进行交互,仅此而已。
我的 show.html.erb:
<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-download fade">
<td></td>
<td class="name">
<a href="{%=file.url%}" download="{%=file.name%}">{%=file.name%}</a>
</td>
<td class="nam">
<a href="{%=file.url_chip_image%}" download="{%=file.name%}">{%=file.name%}</a>
</td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td class="Pic">
<button class="btn btn-mini btn-info">Pic</button>
</td>
<td class="Hist">
<button class="btn btn-mini btn-primary" >Hist</button>
</td>
<td class="delete">
<button class="btn btn-mini btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}">
<i class="icon-trash icon-white"></i>
</button>
<input type="checkbox" name="delete" value="1">
</td>
</tr>
{% } %}
</script>
我的上传.rb:
def to_jq_upload
{
"name" => (read_attribute(:upload_file_name)).split(".").first,
"size" => read_attribute(:upload_file_size),
"url" => upload.url(:original),
"delete_url" => upload_path(self),
"delete_type" => "DELETE",
"url_chip_image"=>read_attribute(:chip_image),
}
end
after_save :do_picture_analyse
def do_picture_analyse
if read_attribute(:chip_image)==nil
require 'rinruby'
myr = RinRuby.new(echo=false)
myr.filepath=upload.path(:original)
myr.fileurl=upload.url(:original)
myr.eval <<EOF
s=read.table(filepath)
for(j in nchar(filepath):1){
if(substr(filepath,j,j)=="/"){
savepath<-substr(filepath,1,j-1)
file.name<-filepath
file.name<-substr(file.name,j+1,nchar(filepath)-4)
break
}
}
file.name1<-paste(file.name,"image.jpeg",sep="_")
savepath<-paste(savepath,file.name1,sep="/")
jpeg(filename=savepath,width=250, height=250)
hist(s$V1)
dev.off()
EOF
self.update_attributes(
:chip_image => (((myr.fileurl).split("?").first)[6..-5]+'_image.jpeg')
)
end
end
编辑:
do_picture_analysis 可以将一个文件夹作为参数,并通过只为整个文件夹加载一次包来分析其中的所有文件。文件只有两个文件夹(两种不同类型的文件,比如说 .txt 和 .blabla 文件将保存在 txt-Folder 或 blabla-Folder 中。文件夹的类型也保存在数据库中。通过单击按钮,应将两个文件夹传递给 do_picture_analysis ,它将完成所有工作 提前致谢