`
open2ye
  • 浏览: 101011 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

rails 文件上传

阅读更多
注: 本片文章参考 redmine

1.
rails upload_file
2.  database.yml
ruby 代码
  1. development:  
  2.   adapter: sqlite3  
  3.   dbfile: db/dev.db  
  4.   
  5. test:  
  6.   adapter: sqlite3  
  7.   dbfile: db/test.db  
  8.   
  9. production:  
  10.   adapter: sqlite3  
  11.   dbfile: db/prod.db  

3.
ruby script/generate model attachment filename:string disk_filename:string content_type:string created_on:datetime downloads:integer filesize:integer
4.
rake db:migrate
5.
ruby script\generate controller attachment show upload

6.vi app\controllers\attachment_controller.rb
ruby 代码
class AttachmentController < ApplicationController
  def show
  end

  def upload
   
  end
 
  def create
    Attachment.create(:file => params[:file])
    redirect_to :action => "show"
  end
 
  def download
    @attachment = Attachment.find(params[:id])
    @attachment.increment_download

    send_file @attachment.diskfile, :filename => @attachment.filename
  end
end


7.vi app\views\attachment\show.rhtml
xml 代码
 
  1. <table>  
  2.   <thead>  
  3.     <th>Filename</th>  
  4.     <th>Disk_filename</th>  
  5.     <th>Content_type</th>  
  6.     <th>Downloads</th>  
  7.     <th>Filesize</th>  
  8.   </thead>  
  9.   <tbody>  
  10.     <% Attachment.find(:all).each do |a| %>  
  11.     <tr>  
  12.     <td><a href="/attachment/download/<%= a.id%>"><%= a.filename %></a></td>  
  13.     <td><%= a.disk_filename%></td>  
  14.     <td><%= a.content_type%></td>  
  15.     <td><%= a.downloads%></td>  
  16.     <td><%= a.filesize%></td>  
  17.   </tr>  
  18.     <% end %>    
  19.   </tbody>  
  20. </table>  
  21.   
  22. <hr />  
  23. <a href=/attachment/upload>upload</a>  

8.vi app\views\attachment\upload.rhtml
xml 代码
 
  1. <form action="/attachment/create/1" class="tabular" enctype="multipart/form-data" method="post">  
  2. <input id="file" name="file" size="30" type="file" />  
  3. <input name="commit" type="submit" value="Create" />  
  4. <!---->form>  
9.vi app\models\attachment.rb
ruby 代码
 
  1. class Attachment < ActiveRecord::Base  
  2.   validates_presence_of :filename  
  3.     
  4.   cattr_accessor :storage_path  
  5.   @@storage_path = "#{RAILS_ROOT}/files"  
  6.     
  7.   def validate  
  8.     errors.add_to_base :too_long if self.filesize > 5140.kilobytes  
  9.   end  
  10.   
  11.     def file=(incomming_file)  
  12.         unless incomming_file.nil?  
  13.             @temp_file = incomming_file  
  14.             if @temp_file.size > 0  
  15.                 self.filename = sanitize_filename(@temp_file.original_filename)  
  16.                 self.disk_filename = DateTime.now.strftime("%y%m%d%H%M%S") + "_" + self.filename  
  17.                 self.content_type = @temp_file.content_type  
  18.                 self.filesize = @temp_file.size  
  19.             end  
  20.         end  
  21.     end  
  22.       
  23.     def file  
  24.      nil  
  25.     end  
  26.       
  27.     def before_save  
  28.         if @temp_file && (@temp_file.size > 0)  
  29.             logger.debug("saving '#{self.diskfile}'")  
  30.             File.open(diskfile, "wb"do |f|   
  31.                 f.write(@temp_file.read)  
  32.             end  
  33.         end  
  34.     end  
  35.       
  36.     def after_destroy  
  37.         if self.filename?  
  38.             File.delete(diskfile) if File.exist?(diskfile)  
  39.         end  
  40.     end  
  41.       
  42.     # Returns file's location on disk  
  43.     def diskfile  
  44.         "#{@@storage_path}/#{self.disk_filename}"  
  45.     end  
  46.     
  47.   def increment_download  
  48.     increment!(:downloads)  
  49.   end  
  50.       
  51.     def self.most_downloaded  
  52.         find(:all:limit => 5, :order => "downloads DESC")   
  53.     end  
  54.       
  55.   private  
  56.   def sanitize_filename(value)  
  57.       just_filename = value.gsub(/^.*(\\|\/)/, '')   
  58.       @filename = just_filename.gsub(/[^\w\.\-]/,'_')   
  59.   end  
  60.       
  61. end  
10.
在根目录创建文件夹 files
分享到:
评论

相关推荐

    rails上传文件_paperclip

    在Ruby on Rails框架中,Paperclip是一个非常流行的用于处理文件上传的库。它提供了一种简单而优雅的方式来管理和处理模型中的附件,如图片、文档等。Paperclip与ActiveRecord紧密集成,使得在Rails应用中添加文件...

    rails_多文件上传

    Rails 多文件上传插件实现详解 Rails 多文件上传插件是基于 Ruby on Rails 框架的一款插件,旨在实现多文件的同时上传,控制文件的格式、数量,并且兼容多种浏览器,包括 IE6、7、Firefox 等。下面是对插件的详细...

    Rails中上传文件保存中文文件名乱码

    在Rails框架中处理文件上传时,经常会遇到一个问题,那就是当用户尝试上传包含中文名称的文件时,文件名可能会出现乱码。这个问题主要是由于字符编码不兼容导致的。Rails默认使用UTF-8编码,但文件系统或者某些外部...

    jquery-fileupload-rails, 用于 Rails的jQuery文件上传集成.zip

    jquery-fileupload-rails, 用于 Rails的jQuery文件上传集成 Rails 文件上传jQuery-File-Plugin 是一个文件上传插件,由的Tschan 。 jQuery文件上传功能多文件选择。drag&拖放支持。进度栏和jQuery预览图像。 支持...

    rails-uploader:用jQuery-File-Upload实现Rails文件上传

    用于RailsHTML5文件上传器这个gem使用来上传文件。安装在Gemfile中: gem 'rails-uploader'在航线上: mount Uploader :: Engine =&gt; '/uploader' 迁移ActiveRecord: $ bundle exec rails g uploader:install用法...

    Rails里给文件上传添加progress_bar

    在Ruby on Rails(Rails)框架中,为文件上传添加进度条功能可以显著提升用户体验,让用户在上传大文件时能够清楚地看到进度,增加交互性。本文将深入探讨如何在Rails应用中实现这一功能。 首先,我们需要理解文件...

    升级版本后Rails的文件上传

    在Ruby on Rails框架中,文件上传是一个常见的需求,特别是在应用的升级过程中,处理文件上传的策略可能会有所变化。Rails提供了多种处理文件上传的方法,包括直接存储到本地文件系统、使用云存储服务(如Amazon S3...

    rails ajax提交文件或图片

    通过这种方式,我们可以实现无刷新的文件上传,同时保持页面的互动性和用户体验。当然,实际应用中可能还需要考虑错误处理、文件大小限制、文件类型验证等其他细节。在开发过程中,利用`source code`和`tools`来调试...

    使用Rails上传和转换视频

    在Rails中,最常用的文件上传库是Paperclip和CarrierWave,但现在更推荐使用ActiveStorage,这是Rails 5.2及更高版本内置的一个功能。ActiveStorage直接与数据库交互,方便管理和存储文件,同时支持通过第三方服务如...

    Rails项目源代码

    这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...

    rails-ipfs-pics:使用ipfs的基本Rails文件上传应用程序

    自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明… 如果您...

    ruby on rails 开发环境包(ruby1.8.7,rails2.2.3)

    在Rails 2.2.3时代,社区已经发展出很多插件和 gems(Ruby的扩展库),如Devise用于身份验证,CanCanCan进行授权管理,Paperclip或Carrierwave处理文件上传等。虽然这些可能需要适配老版本,但它们能极大地增强你的...

    Advanced Rails

    7. **Rails插件与Gem**:Rails社区提供了丰富的插件和Gem,如Devise用于身份验证,Paperclip或Carrierwave处理文件上传,Resque或Sidekiq实现后台任务队列。掌握如何选择和使用这些工具来扩展应用功能。 8. **Rails...

    ruby on rails最新版

    例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传,Stripe或PayPal集成支付功能,以及各种数据分析和报表生成库等。 总的来说,这个压缩包对于Ruby on Rails的初学者或希望...

    Rails的自动完成分页插件

    在这个场景中,我们关注的是Rails的自动完成、文件上传、分页以及上传进度管理相关的插件。让我们详细了解一下这些关键知识点: 1. **Rails 自动完成**: 自动完成是一种功能,允许用户在输入框中键入时提供预填...

    ruby on rails 2.3.5 api html版

    10. **插件和Gem**:Rails的生态系统中,Gem是第三方库的主要形式,它们提供了额外的功能,如Devise用于身份验证,CanCanCan用于授权,Paperclip或Carrierwave处理文件上传等。 11. **部署**:了解如何将Rails应用...

Global site tag (gtag.js) - Google Analytics