zoukankan      html  css  js  c++  java
  • rails 上传文件

    控制器文件

    app/controllers/api/v1/order_controller.rb

      def create
        # 从本地读取
        log_dir = File.expand_path(File.join(Rails.root.to_s,'/log/ip04.log'))
        puts "log_dir: #{log_dir}"
        file = File.open(log_dir)
        puts "file: #{file} file.size:#{file.size} #{(file.size.to_f/1024/1024).round(2)}mb"
        puts "File::size?: #{File::size?( log_dir)}"
        puts "File::exist?( path): #{File::exist?( log_dir)}"
        puts "file.atime: #{file.atime}"
        puts "file.log_dir: #{File.extname(log_dir)}"
    
        # form表单上传
        file = params[:file] #上传的key名为file
        puts "@file #{file}"
        # {"file"=>#<ActionDispatch::Http::UploadedFile:0x00007f3bf09cc510 @tempfile=#<Tempfile:/tmp/RackMultipart20210807-28560-1ld7wxc.txt>, @original_filename="ip1000_v1_res_uniq.txt", @content_type="text/plain", @headers="Content-Disposition: form-data; name="file"; filename="ip1000_v1_res_uniq.txt"
    Content-Type: text/plain
    ">}
        puts "@original_filename #{file.original_filename}"
        puts "@basename #{File::basename(file.original_filename)}"
        puts "@size11 #{	(File::size(file.tempfile).to_f/1024/1024)}mb" #@size11 0.00013637542724609375mb
        puts "@zise22 #{file.size}" #@zise22 143
        puts "11111"
        if  file.size.blank? || !File.extname(file.original_filename).downcase.in?([".txt"])
          render(json:{msg:"file is empty! or is not txt"})
          return
        end
        filename = uploadfile(file)
        puts "filename:#{filename}"
        render(json:{msg:"ok"})
      end
    
      # 上传文件
      def uploadfile(file)
        if !file.original_filename.empty?
          dir_path = get_upload_dir_path
          #设置目录路径,如果目录不存在,生成新目录
          FileUtils.mkdir_p(dir_path, :mode => 2750) unless File.exist?(dir_path)
          #写入文件
          ##wb 表示通过二进制方式写,可以保证文件不损坏
          filename = "#{Time.now.strftime('%Y%m%d%H%M%S')}_#{file.original_filename}"
          filename_path = dir_path + filename
          File.open(filename_path, "wb") do |f|
            f.write(file.read)
          end
          return filename
        end
      end
    
      # 上传文件的目录
      def get_upload_dir_path(upload_file_path = "/public/upload/category_statistics/")
        @upload_file_path = "#{Rails.root}#{upload_file_path}"
      end
    

    postman 上传

    效果

    控制器里获取传参

      # {
      #   "type": "ip"
      # }
      def create2
        # 接收单个参数
        # q = params[:q]
        # 读取所有body 去掉回车换行,方便base64
        str = request.body.read
        puts "str: #{str}"
        if str.blank?
          Rails.logger.error("body内容不能为空")
          return { status: false, error_code: 1, error_msg: "body内容不能为空" }
        end
        # {"type": "ip"}
        body_json = JSON.parse(str)
        p_type = body_json["type"]
        puts "body_json: #{body_json} #{body_json["type"]}"
    
        case p_type
        when "ip"
          puts "ip"
          # save_ip
          save_parent_cate
        else
          puts "不支持"
          res = { code: 400, msg: "不支持 type:#{p_type}" }
          render(json: res)
        end
    
      end
    
    [Haima的博客] http://www.cnblogs.com/haima/
  • 相关阅读:
    Asp.Net Core 入门(七)—— 安装Bootstrap
    Asp.Net Core 入门(八)—— Taghelper
    Asp.Net Core 入门(五)—— 布局视图_Layout.cshtml
    Asp.Net Core 入门(六)—— 路由
    Asp.Net Core 入门(四)—— Model、View、Controller
    Asp.Net Core 入门(三) —— 自定义中间件
    Asp.Net Core 入门(二)——Startup.cs做了什么
    Asp.Net Core 入门(一)——Program.cs做了什么
    用Canvas+Javascript FileAPI 实现一个跨平台的图片剪切、滤镜处理、上传下载工具
    【转】java中注解的使用与实例
  • 原文地址:https://www.cnblogs.com/haima/p/15111242.html
Copyright © 2011-2022 走看看