Ruby on rails jQuery文件上传插件集成到Rails中
我将如何集成到Rails应用程序中。wiki上有一个定制服务器的安装指南,但我一直坚持使用#4 on(定制服务器)。我应该创建一个新的视图吗?任何帮助都将不胜感激 谢谢我认为指令4告诉您的是,只需将各种javascript文件复制到您的定制服务器环境中,在本例中是Ruby on Rails 最好使用资产管道在RoR中提供Javascript 1) 下载归档文件并将其解压缩到您的开发环境中,您需要将文件夹JQuery文件上载到app/assets/javascripts目录 完成后,您应该: /无论什么/app/assets/javascripts/JQuery文件上传/stuff 现在,您必须告诉rails何时需要加载javascript 为了让事情变得简单,我们假设每个页面都需要javascript 如果当前应用程序相当“默认”,则javascript清单文件:Ruby on rails jQuery文件上传插件集成到Rails中,ruby-on-rails,jquery-file-upload,Ruby On Rails,Jquery File Upload,我将如何集成到Rails应用程序中。wiki上有一个定制服务器的安装指南,但我一直坚持使用#4 on(定制服务器)。我应该创建一个新的视图吗?任何帮助都将不胜感激 谢谢我认为指令4告诉您的是,只需将各种javascript文件复制到您的定制服务器环境中,在本例中是Ruby on Rails 最好使用资产管道在RoR中提供Javascript 1) 下载归档文件并将其解压缩到您的开发环境中,您需要将文件夹JQuery文件上载到app/assets/javascripts目录 完成后,您应该: /无
app/assets/javscripts/application.js
控制将包含在每个页面上的javascript
将此行添加到该文件:
//= require_tree .
或
如果app/assets/javascripts中只有一个目录,那么以上两个目录都是相同的。嗨,在rails中使用blueimp文件上传非常容易。您只需安装可用于blueimp文件上传的gem即可。著名的有Carrierwave gem和Dragonfly gem。如果您有一个这样的宝石,您可以使用以下步骤来使用blueimp 先决条件
have jQuery setup in your app
copy jQuery File Upload files in the proper directories of your Rails app
模型
用于Carrierwave宝石
我们将使用基本Carrierwave上传器:
class AvatarUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
类AvatarUploaderclass Picture < ActiveRecord::Base
include Rails.application.routes.url_helpers
mount_uploader :avatar, AvatarUploader
#one convenient method to pass jq_upload the necessary information
def to_jq_upload
{
"name" => read_attribute(:avatar),
"size" => avatar.size,
"url" => avatar.url,
"thumbnail_url" => avatar.thumb.url,
"delete_url" => picture_path(:id => id),
"delete_type" => "DELETE"
}
end
end
类图片读取属性(:化身),
“大小”=>avatar.size,
“url”=>avatar.url,
“缩略图url”=>avatar.thumb.url,
“删除url”=>图片路径(:id=>id),
“删除类型”=>“删除”
}
结束
结束
与蜻蜓宝石一起使用
设置图片模型(确保您的数据库中同时有avatar\u uid和avatar\u name列)
类图片读取属性(:化身名称),
“大小”=>avatar.size,
“url”=>avatar.url,
“缩略图url”=>avatar.thumb('80x80#').url,
“删除url”=>图片路径(:id=>id),
“删除类型”=>“删除”
}
结束
结束
控制器
第一个处理下载的控制器:(html响应用于使用iframe解决方案的浏览器)
class PicturesController@pictures.collect{| p | p.to_jq_upload}.to_json
结束
def创建
@picture=picture.new(参数[:picture])
如果@picture.save
回应待办事项|格式|
format.html{
render:json=>[@picture.to_jq_upload]。to_json,
:content_type=>text/html,
:布局=>false
}
format.json{
render:json=>[@picture.to_jq_upload].to_json
}
结束
其他的
render:json=>[{:error=>“custom_failure”}],:status=>304
结束
结束
def销毁
@picture=picture.find(参数[:id])
@破坏
render:json=>true
结束
结束
它的路线是:
资源:图片,:only=>[:索引,:创建,:销毁]
我们来玩吧
在您想要的任何视图文件中,复制粘贴此代码并享受
<h2><%= t('photos.title') %></h2>
<%= form_for Picture.new, :html => { :multipart => true, :id => "fileupload" } do |f| %>
<!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
<div class="row fileupload-buttonbar">
<div class="span7">
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="icon-plus icon-white"></i>
<span>Add files...</span>
<%= f.file_field :avatar %>
</span>
<button type="submit" class="btn btn-primary start">
<i class="icon-upload icon-white"></i>
<span>Start upload</span>
</button>
<button type="reset" class="btn btn-warning cancel">
<i class="icon-ban-circle icon-white"></i>
<span>Cancel upload</span>
</button>
<button type="button" class="btn btn-danger delete">
<i class="icon-trash icon-white"></i>
<span>Delete</span>
</button>
<input type="checkbox" class="toggle">
</div>
<div class="span5">
<!-- The global progress bar -->
<div class="progress progress-success progress-striped active fade">
<div class="bar" style="width:0%;"></div>
</div>
</div>
</div>
<!-- The loading indicator is shown during image processing -->
<div class="fileupload-loading"></div>
<br>
<!-- The table listing the files available for upload/download -->
<table class="table table-striped"><tbody class="files" data-toggle="modal-gallery" data-target="#modal-gallery"></tbody>
</table>
<% end %>
<script>
var fileUploadErrors = {
maxFileSize: 'File is too big',
minFileSize: 'File is too small',
acceptFileTypes: 'Filetype not allowed',
maxNumberOfFiles: 'Max number of files exceeded',
uploadedBytes: 'Uploaded bytes exceed file size',
emptyResult: 'Empty file upload result'
};
</script>
<!-- The template to display files available for upload -->
<script id="template-upload" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-upload fade">
<td class="preview"><span class="fade"></span></td>
<td class="name"><span>{%=file.name%}</span></td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
{% if (file.error) { %}
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
{% } else if (o.files.valid && !i) { %}
<td>
<div class="progress progress-success progress-striped active"><div class="bar" style="width:0%;"></div></div>
</td>
<td class="start">{% if (!o.options.autoUpload) { %}
<button class="btn btn-primary">
<i class="icon-upload icon-white"></i>
<span>{%=locale.fileupload.start%}</span>
</button>
{% } %}</td>
{% } else { %}
<td colspan="2"></td>
{% } %}
<td class="cancel">{% if (!i) { %}
<button class="btn btn-warning">
<i class="icon-ban-circle icon-white"></i>
<span>{%=locale.fileupload.cancel%}</span>
</button>
{% } %}</td>
</tr>
{% } %}
</script>
<!-- The template to display files available for download -->
<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-download fade">
{% if (file.error) { %}
<td></td>
<td class="name"><span>{%=file.name%}</span></td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
{% } else { %}
<td class="preview">{% if (file.thumbnail_url) { %}
<a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
{% } %}</td>
<td class="name">
<a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a>
</td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td colspan="2"></td>
{% } %}
<td class="delete">
<button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}">
<i class="icon-trash icon-white"></i>
<span>{%=locale.fileupload.destroy%}</span>
</button>
<input type="checkbox" name="delete" value="1">
</td>
</tr>
{% } %}
</script>
<!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included -->
<%= javascript_include_tag 'jquery.ui.widget.js' %>
<!-- The Templates and Load Image plugins are included for the FileUpload user interface -->
<script src="https://blueimp.github.com/JavaScript-Templates/tmpl.min.js"></script>
<script src="https://blueimp.github.com/JavaScript-Load-Image/load-image.all.min.js"></script>
<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
<%= javascript_include_tag 'jquery.iframe-transport.js' %>
<%= javascript_include_tag 'jquery.fileupload.js' %>
<%= javascript_include_tag 'jquery.fileupload-ui.js' %>
<!-- add include_tag js files to config.assets.precompile in ...environments/production.rb if you have it in vendor/ assets -->
<script type="text/javascript" charset="utf-8">
$(function () {
// Initialize the jQuery File Upload widget:
$('#fileupload').fileupload();
//
// Load existing files:
$.getJSON($('#fileupload').prop('action'), function (files) {
var fu = $('#fileupload').data('blueimp-fileupload'),
template;
fu._adjustMaxNumberOfFiles(-files.length);
template = fu._renderDownload(files)
.appendTo($('#fileupload .files'));
// Force reflow:
fu._reflow = fu._transition && template.length &&
template[0].offsetWidth;
template.addClass('in');
$('#loading').remove();
});
});
</script>
{:multipart=>true,:id=>fileupload}do | f |%>
添加文件。。。
开始上传
取消上传
删除
var fileUploadErrors={
maxFileSize:'文件太大',
minFileSize:'文件太小',
acceptFileTypes:“不允许使用文件类型”,
maxNumberOfFiles:“超过最大文件数”,
uploadedBytes:“上载的字节超过文件大小”,
emptyResult:“空文件上载结果”
};
{%for(var i=0,file;file=o.files[i];i++){%}
{%=文件名%}
{%=o.formatFileSize(file.size)%}
{%if(file.error){%}
{%=locale.fileupload.error%}{%=locale.fileupload.errors[file.error]| | file.error%}
{%}如果(o.files.valid&&!i){%}
{%if(!o.options.autoUpload){%}
{%=locale.fileupload.start%}
{% } %}
{%}其他{%}
{% } %}
{%if(!i){%}
{%=locale.fileupload.cancel%}
{% } %}
{% } %}
{%for(var i=0,file;file=o.files[i];i++){%}
{%if(file.error){%}
{%=文件名%}
{%=o.formatFileSize(file.size)%}
{%=locale.fileupload.error%}{%=locale.fileupload.errors[file.error]| | file.error%}
{%}其他{%}
class Picture < ActiveRecord::Base
include Rails.application.routes.url_helpers
image_accessor :avatar
#one convenient method to pass jq_upload the necessary information
def to_jq_upload
{
"name" => read_attribute(:avatar_name),
"size" => avatar.size,
"url" => avatar.url,
"thumbnail_url" => avatar.thumb('80x80#').url,
"delete_url" => picture_path(:id => id),
"delete_type" => "DELETE"
}
end
end
class PicturesController < ApplicationController
def index
@pictures = Picture.all
render :json => @pictures.collect { |p| p.to_jq_upload }.to_json
end
def create
@picture = Picture.new(params[:picture])
if @picture.save
respond_to do |format|
format.html {
render :json => [@picture.to_jq_upload].to_json,
:content_type => 'text/html',
:layout => false
}
format.json {
render :json => [@picture.to_jq_upload].to_json
}
end
else
render :json => [{:error => "custom_failure"}], :status => 304
end
end
def destroy
@picture = Picture.find(params[:id])
@picture.destroy
render :json => true
end
end
<h2><%= t('photos.title') %></h2>
<%= form_for Picture.new, :html => { :multipart => true, :id => "fileupload" } do |f| %>
<!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
<div class="row fileupload-buttonbar">
<div class="span7">
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="icon-plus icon-white"></i>
<span>Add files...</span>
<%= f.file_field :avatar %>
</span>
<button type="submit" class="btn btn-primary start">
<i class="icon-upload icon-white"></i>
<span>Start upload</span>
</button>
<button type="reset" class="btn btn-warning cancel">
<i class="icon-ban-circle icon-white"></i>
<span>Cancel upload</span>
</button>
<button type="button" class="btn btn-danger delete">
<i class="icon-trash icon-white"></i>
<span>Delete</span>
</button>
<input type="checkbox" class="toggle">
</div>
<div class="span5">
<!-- The global progress bar -->
<div class="progress progress-success progress-striped active fade">
<div class="bar" style="width:0%;"></div>
</div>
</div>
</div>
<!-- The loading indicator is shown during image processing -->
<div class="fileupload-loading"></div>
<br>
<!-- The table listing the files available for upload/download -->
<table class="table table-striped"><tbody class="files" data-toggle="modal-gallery" data-target="#modal-gallery"></tbody>
</table>
<% end %>
<script>
var fileUploadErrors = {
maxFileSize: 'File is too big',
minFileSize: 'File is too small',
acceptFileTypes: 'Filetype not allowed',
maxNumberOfFiles: 'Max number of files exceeded',
uploadedBytes: 'Uploaded bytes exceed file size',
emptyResult: 'Empty file upload result'
};
</script>
<!-- The template to display files available for upload -->
<script id="template-upload" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-upload fade">
<td class="preview"><span class="fade"></span></td>
<td class="name"><span>{%=file.name%}</span></td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
{% if (file.error) { %}
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
{% } else if (o.files.valid && !i) { %}
<td>
<div class="progress progress-success progress-striped active"><div class="bar" style="width:0%;"></div></div>
</td>
<td class="start">{% if (!o.options.autoUpload) { %}
<button class="btn btn-primary">
<i class="icon-upload icon-white"></i>
<span>{%=locale.fileupload.start%}</span>
</button>
{% } %}</td>
{% } else { %}
<td colspan="2"></td>
{% } %}
<td class="cancel">{% if (!i) { %}
<button class="btn btn-warning">
<i class="icon-ban-circle icon-white"></i>
<span>{%=locale.fileupload.cancel%}</span>
</button>
{% } %}</td>
</tr>
{% } %}
</script>
<!-- The template to display files available for download -->
<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-download fade">
{% if (file.error) { %}
<td></td>
<td class="name"><span>{%=file.name%}</span></td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
{% } else { %}
<td class="preview">{% if (file.thumbnail_url) { %}
<a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
{% } %}</td>
<td class="name">
<a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a>
</td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td colspan="2"></td>
{% } %}
<td class="delete">
<button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}">
<i class="icon-trash icon-white"></i>
<span>{%=locale.fileupload.destroy%}</span>
</button>
<input type="checkbox" name="delete" value="1">
</td>
</tr>
{% } %}
</script>
<!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included -->
<%= javascript_include_tag 'jquery.ui.widget.js' %>
<!-- The Templates and Load Image plugins are included for the FileUpload user interface -->
<script src="https://blueimp.github.com/JavaScript-Templates/tmpl.min.js"></script>
<script src="https://blueimp.github.com/JavaScript-Load-Image/load-image.all.min.js"></script>
<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
<%= javascript_include_tag 'jquery.iframe-transport.js' %>
<%= javascript_include_tag 'jquery.fileupload.js' %>
<%= javascript_include_tag 'jquery.fileupload-ui.js' %>
<!-- add include_tag js files to config.assets.precompile in ...environments/production.rb if you have it in vendor/ assets -->
<script type="text/javascript" charset="utf-8">
$(function () {
// Initialize the jQuery File Upload widget:
$('#fileupload').fileupload();
//
// Load existing files:
$.getJSON($('#fileupload').prop('action'), function (files) {
var fu = $('#fileupload').data('blueimp-fileupload'),
template;
fu._adjustMaxNumberOfFiles(-files.length);
template = fu._renderDownload(files)
.appendTo($('#fileupload .files'));
// Force reflow:
fu._reflow = fu._transition && template.length &&
template[0].offsetWidth;
template.addClass('in');
$('#loading').remove();
});
});
</script>