`
酷的飞上天空
  • 浏览: 521761 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

Rails简单文件上传

阅读更多

RMagick和ruby-debug-ide还是没有安装成功,郁闷啊。

Rails的文件上传说起来还是很容易实现的,相比来说java的文件上传那是一个麻烦啊。

 

controller如下:

 

#coding:utf-8
class ImageController < ApplicationController
  def index
    render :action => "img"
  end
  def new
    if request.post?
      img = params["img"]
      if !img.nil? and img.size>0
        @path = move_file(img)
#        logger.debug "the size is #{img.size}"
      else
        @path = "rails.png"
      end
    end
    render :action => "img"
  end
  def move_file(file)
    #取得上传的文件名
    @name = change_charset(File.basename(file.original_filename))
    #使用当前经过的秒数加上源文件后缀名,作为保存的新名称。
    save_name = change_charset(Time.new.to_i.to_s+"."+@name.split(".")[1])
    #保存图片的绝对路径
    path = "#{RAILS_ROOT}/public/images/#{save_name}"
    File.open(path, "wb") do |f|
      f.write(file.read)
    end
    return save_name
  end

  #用于转码,从表单取得的数据是使用ASCII-8BIT编码的。汗...
  def change_charset(str)
    if str.kind_of?(String)
      return str.force_encoding("utf-8")
    end
    return str
  end
end

 

rhtml如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <base href="/"/>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  </head>
  <body>
    <% form_tag('/image/new',:multipart=>true)  do -%>
      上传的图片:<%= file_field_tag "img"  %>
      <p />
      <%= submit_tag "提交图片"  %>
    <% end -%>
    <p />
    上传的图片为:
    <img alt="" title="<%=@name%>"  src="/images/<%=@path%>" />
  </body>
</html>

  

这期间遇到两个问题:

1.表单提交的的数据在后台取出后竟然是ASCII-8BIT的格式,这个有点迷惑。。。

2.图片的src为 images/xxxxxx时,图片无法显示。但改为/images/xxxxxx后图片又正常显示。

分享到:
评论

相关推荐

    rails上传文件_paperclip

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

    rails_多文件上传

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

    rails 文件上传

    本篇文章将深入探讨Rails中的文件上传机制,并结合给定的“rails 文件上传”主题,提供关于如何在Rails应用中实现文件上传的详细知识。 1. **ActionDispatch::Http::UploadedFile**: 当用户通过表单上传文件时,...

    升级版本后Rails的文件上传

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

    Rails里给文件上传添加progress_bar

    这里我们假设使用jQuery,配合jQuery File Upload插件,它提供了一个简单的API来处理文件上传和进度事件。 1. **安装jQuery和jQuery File Upload** 在`Gemfile`中添加`jquery-rails` gem,然后运行`bundle install...

    Rails项目源代码

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

    rails/简易报告整理网页版

    Rails支持处理文件上传,通常通过`Paperclip`或`Carrierwave`这样的第三方库实现。这些库提供了方便的接口,可以方便地将文件关联到模型,并在视图中展示下载链接。项目中可能使用了类似的库来处理报告的上传和下载...

    Rails的自动完成分页插件

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

    Ruby-CarrierWaveRubyWeb框架更优雅的解决方案文件上传

    Ruby-CarrierWave 是一个流行的文件上传库,专为Ruby Web框架如Rails和Sinatra设计,旨在提供一种更优雅、更灵活的方式来处理文件上传。它弥补了Ruby标准库在处理文件上传时的不足,提供了丰富的功能和易于定制的...

    Rails 3 in Action

    第九章讨论了 **文件上传** 的实现方式,这是 Web 应用中常见的功能之一。 - **文件上传**: - 实现用户可以上传图片、文档等文件的功能。 - 需要考虑安全性问题,防止恶意文件上传。 - 可以使用第三方服务,如 ...

    Ruby on Rails 指南 v5.0.1 中文版

    - **上传文件**:介绍如何处理文件上传操作。 - **定制表单生成器**:解释如何创建自定义的表单生成器。 - **理解参数命名约定**:解释表单提交时参数的命名规则。 - **处理外部资源的表单**:指导如何处理来自外部...

    Ruby On Rails中文教材(PDF)

    10. **Gem包管理**:Ruby的Gem系统使得安装和管理第三方库变得简单,如Devise用于用户认证,Paperclip或Carrierwave处理文件上传,Bootstrap提供前端UI组件等。 学习Rails的过程中,实践尤为重要。通过完成实际项目...

    jack_up, 在 Rails 中,[DEPRECATED] 轻松AJAX文件上传.zip

    jack_up, 在 Rails 中,[DEPRECATED] 轻松AJAX文件上传 从October年8 月开始,已经不推荐使用 另外,对于其他的, 付费和免费的上传工具,JackUp已经被否决了。 JackUp简单AJAX文件在 Rails 中上传。安装修改你的...

    Ruby-attache一个文件上传方式

    Ruby-Attache是一个用于处理文件上传的库,它为开发者提供了简单、安全的方式来管理应用程序中的文件上传功能。在Ruby世界中,Attache旨在提供一种优雅的API,使得开发者能够轻松集成文件上传到他们的Web应用中,...

    使用RSpec 测试Rails 程序.pdf

    - **测试文件上传**:对于涉及文件上传的功能,需要编写专门的测试来验证其行为。 - **测试时间**:由于应用可能依赖于时间计算,因此需要测试与时间相关的功能。 - **测试Web服务**:如果应用与其他Web服务进行交互...

    Ruby on Rails入门例子

    在实际开发中,还可以利用各种 Gems(Ruby 社区的库)扩展功能,如 Devise 用于用户认证,Bootstrap 提供响应式布局,以及 Paperclip 或 Carrierwave 处理文件上传等。 通过这个入门例子,你将了解 Rails 的基本...

    Rails Best Practices

    5. **使用gem**:Rails社区有大量优秀的gem,如Devise用于用户认证,CanCanCan进行权限控制,Carrierwave或Paperclip处理上传等。合理选择和使用gem可以快速实现功能,同时注意版本管理和gem的更新。 6. **测试驱动...

    ruby rails_kindeditor(编译器)插件

    在实际开发中,你还可以结合其他工具和库,例如使用 ActiveStorage(Rails 5.2 引入的存储服务)处理文件上传,或者利用 ActionCable 实现编辑器内容的实时预览。总的来说,`rails_kindeditor` 插件是 Ruby on Rails...

    Ruby_on_Rails快速Web应用开发实战

    RoR社区活跃,有许多优秀的gem(RoR的扩展库)可供使用,例如Devise用于用户认证,CanCanCan进行权限控制,Carrierwave或Paperclip处理文件上传,Bootstrap gems帮助快速构建响应式界面等。这些gem极大地扩展了RoR的...

Global site tag (gtag.js) - Google Analytics