• ruby项目文件上传功能实现


    这里我将从视图、控制器各个层面进行讲解。

     rails 提供了文件上传功能,可以直接进行下面的编码

    <%= form_for :document, :html =>{:multipart => true} do |f| %>
      <%= f.file_field :file %>
      <%= f.submit "Upload" %>
    <% end %>

    控制器层面:

    document_controller.rb中

     
    #创建一个新文档
    def create  
        @document = Document.new(document_params)
        unless request.get?
          filename = uploadfile(@document.file)
          @document.file = filename
         if  @document.save
           redirect_to list_documents_path
         else
           @document.file = nil
           render "new"
         end
        end
      end
    
    
    def uploadfile(file)
        require 'net/ftp'
        if !file.original_filename.empty?  #file.original_filename 获取文件名字
          filename = CGI::escape(file.original_filename)
          FileUtils.mkdir("#{Rails.root}/public/upload") unless File.exist?("#{Rails.root}/public/upload")
          #wb 表示通过二进制方式写,可以保证文件不损坏
          File.open("#{Rails.root}/public/upload/#{filename}", "wb") do |f|
            f.write(file.read)
          end
          path = "#{Rails.root}/public/upload/#{filename}"
          local_file = path
          upload_cmd(SysUtils::FILE_SERVER[:host], SysUtils::FILE_SERVER[:user], SysUtils::FILE_SERVER[:passwd]) do |conn|  #打开文件服务器
            conn.chdir("/platform_tools/document")  #切换到保存文档的目录
            cur_files = conn.nlst
            cur_file_flag = true
            cur_files.each do |month_file|
              if month_file.include?("#{filename}")
                cur_file_flag =false
              end
            end
            if cur_file_flag
              conn.putbinaryfile(local_file,"/platform_tools/document/"+CGI::unescape(filename))
            end
          end if File.exists?(local_file)
          File.delete(path)
          return CGI::unescape(filename)
        end
      end
    private
    Directory = "/public/upload/"
    def document_params
    params.require(:document).permit(:title,:brief_introduction,:detail_introduction,:status,:file)
    end
    
    

    这样就可以简单实现文档的上传操作了。

    我这里数据库中保存的是上传文件的文件名,同样你也可以保存文件路径、文档类型之类的,不过我这里不需要,所以没有实现。

  • 相关阅读:
    转载:渗透利器-余弦
    搜索引擎?
    Gartner:用自适应安全架构来应对高级定向攻击
    内网渗透测试思路-FREEBUF
    渗透测试常规思路分析-FREEBUF
    SQLMAP使用笔记
    如何打造一款优秀的产品管理系统?
    阿里的钉钉能干掉腾讯的微信么?
    下一个亿万市场:企业级SaaS服务谁能独领风骚
    如何注册iClap账号?
  • 原文地址:https://www.cnblogs.com/x123811/p/7093375.html
Copyright © 2020-2023  润新知