rails文件上传插件 acts_as_attachment 的实例

参考自:http://weblog.techno-weenie.net/articles/acts_as_attachment
重点词:acts_as_attachment 、validates_as_attachment、uploaded_data
环境:InstantRails-2.0-win

1.创建rails工程及数据库


rails acts_as_attachment_test -d sqlite3
cd acts_as_attachment_test
rake db:create:all


2.安装插件acts_as_attachment


ruby script\plugin install http://svn.techno-weenie.net/projects/plugins/acts_as_attachment


3.生成迁移代码并且执行数据库迁移命令生成数据库


ruby script/generate attachment_model file_list
rake db:migrate


4.修改app\models\file_list.rb文件如下,更详细的限制文件大小、类型==参考vendor\plugins\acts_as_attachment\lib\technoweenie\acts_as_attachment.rb文件27-38行


##app\models\file_list.rb
class FileList < ActiveRecord::Base
  acts_as_attachment :storage => :file_system ,:file_system_path => 'public/files'
  validates_as_attachment
end


5.创建控制器、方法及修改


ruby script\generate controller file index new show create


修改app\controllers\file_controller.rb文件如下


##app\controllers\file_controller.rb
class FileController < ApplicationController

  def index
    @file = FileList.find(:all)
  end

  def new
    @file = FileList.new
  end

  def show
    @file = FileList.find(params[:id])
  end

  def create
    @file = FileList.create (params[:file])
    redirect_to :action => 'show' ,:id => @file
    rescue ActiveRecord::RecordInvalid
    render :action => 'new'
  end

end


修改app\views\file\index.html.erb文件如下


<!--##app\views\file\index.html.erb-->
<h1>file</h1>
<ul>
<% @file.each do |f| -%>
  <li><%= link_to f.filename, :action => 'show', :id => f %></li>
<% end -%>
</ul>
<p><%= link_to 'New', :action => 'new' %></p>


修改app\views\file\show.html.erb文件如下


<!--##app\views\file\show.html.erb-->
<p><%= @file.filename %></p>
<%= image_tag @file.public_filename, :size => @file.image_size %>
<p><%= link_to 'Index', :action => 'index' %></p>


修改app\views\file\new.html.erb文件如下


<!--##app\views\file\new.html.erb-->
<h1>New file</h1>
<% form_for :file, :url => { :action => 'create' }, :html => { :multipart => true } do |f| -%>
  <p><%= f.file_field :uploaded_data %></p>
  <p><%= submit_tag '提交' %></p>
<% end -%>


6.启动服务,测试效果


start mongrel_rails start -p 3000
start http://127.0.0.1:3000/file

 

Flask文件下载避坑指南:send_file的as_attachment和mimetype到底怎么配才不出错? 本文深入解析Flask中send_file函数在文件下载时的常见问题,特别是as_attachment和mimetype参数的配置技巧。通过对比不同浏览器的兼容性差异、处理非常见文件类型的MIME类型、解决文件名乱码问题以及优化二进制流传输,提供了一套完整的解决方案,帮助开发者避免常见的文件下载陷阱。 阅读详情

相关推荐

【计算机三级-数据库技术】操作题大题(第1套)

从触发器的语法中可知,【1】处应该填写的是执行触发器的表,【2】处应该填写指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。使用FOR或AFTER选顶定义的触发器为后触发器,即只有在引发触发器执行的语句中的操作都已成功执行,并且所有的约束检查也成功完成后,才执行触发器。转换成新的独立的模式,模式的属性由联系本身的属性及两个实体的键构成,主键由两端实体的键组合而成。实体的转换:在从ER图转换为关系模式时,一个实体转换成一个关系模式,实体的属性就是关系模式的属性,实体的键就是关系的主键。

放纵小开爱的博客 1101

flask框架实现文件下载接口

flask框架实现文件下载接口

余香 5208

告别GIS软件!用R语言ggplot2+ggmapcn绘制出版级世界地图(附5种投影对比图)

本文提供了一份完整的实践指南,教你如何利用R语言及其强大的ggplot2生态系统,结合ggmapcn包,绘制出出版级的世界地图。文章详细对比了五种经典地图投影(如摩尔维德、罗宾森投影)的代码实现与视觉差异,并讲解了如何添加比例尺、指北针等专业元素,最终导出高清PDF,实现从数据分析到专业可视化的全流程代码化操作,彻底告别传统GIS软件。

p5l2m9n4o6q的博客 407

Flask三种文件下载方法

Flask 是一个流行的 Python Web 框架,它提供了多种方法来实现文件下载。在本文中,我们将介绍三种不同的方法,以便你能够选择最适合你应用程序的方法。

旦莫的博客 7935

如何配置SSC CANopen的excel文件

如何配置 CANOpen 的 EXCEL 文件

PI_sunyang的博客 3700

小红书urlscheme和Activity

本文档详细介绍了小红书App的Deeplink跳转规范,涵盖了多个功能模块的跳转协议。主要内容包括:主页各Tab(关注、发现、购买)的跳转方式;不同类型笔记(图文/视频/长笔记)的详情页跳转参数;用户相关页面(主页/绑定/资料/消息等)的跳转协议;搜索功能(输入页/结果页)的跳转方式;以及话题、标签、专辑、H5页面等特殊场景的跳转实现。文档还提供了各跳转协议所需的参数说明,包括参数类型、默认值、是否必填等详细信息,并标注了不同版本和平台的兼容性要求。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 786

Python-Django 建站 —— 第四篇

一、FBV视图 视图View是Django的MTV架构模式的V部分,负责处理用户请求和生成响应的响应内容。在视图里定义def函数,这种方式称为FBV(Function Base Views) 1,设置响应方式 1.1 返回响应内容

Lisa_oliv的专栏 862

CarSim - 仿真汽车驾驶行为的完整源代码及描述

以上是多年收集的稀有软件CarSim的源代码和描述,借助CarSim提供的功能,用户可以准确地模拟和研究汽车的驾驶行为,为汽车设计、驾驶辅助系统等领域提供有价值的支持。是一款用于模拟汽车驾驶行为的稀有软件,它经过多年的收集和开发,提供了一套完整的源代码和相应的描述,能够准确地模拟真实世界中的汽车运动和操控。CarSim的源代码采用现代化的。

weixin_50547796的博客 293

flask实现文件的下载与展示

在开发中可能会遇到将文件展示出来的需求,如图片作为头像,也会遇到下载类的需求,这里总结了自己学到的用flask实现下载与展示的方法. 1.图片展示 经过测试发现,mimetype写错了也能正确展现,但为了保险,最好写对 from flask import Response img_path = "这里是图片的完整路径" file = open(img_path,"rb").read() # 将文件以二进制形式打开 return Response(file, mimetype='image/文件后缀

Ajzab的博客 2234

【win10】win 10 电脑喇叭音频显示红叉的处理方法

目录 一、报错情况 二、“音频服务未运行”解决方法 三、“未插入扬声器或耳机”解决方法 一、报错情况 (1)当电脑的扬声器喇叭图标上带有红X符号,提示“音频服务未运行”时: (2)小喇叭上面有红叉,显示“未插入扬声器或耳机”时: 二、“音频服务未运行”解决方法 (1)开始菜单搜索“服务”: (2)没有启动的点击“启动”,已启动的点击“重新启动”: (3)继续,右...

顾三殇 —— 博客空间(软件测试) 17万+

数字IC/FPGA 秋招知识点不全面整理

数字IC/FPGA 秋招知识点不全面整理

w0shishabi的博客 7866

Flask send_file request

send_file: send_file( filename_or_fp, mimetype=None, as_attachment=False, attachment_filename=None, add_etags=True, cache_timeout=None, conditional=False, last_modified=None) filenam...

weixin_30413739的博客 1504

R语言使用party包中的ctree函数构建条件推理决策树(Conditional inference trees)、使用plot函数可视化训练好的条件推理决策树、条件推理决策树的叶子节点的阴影区域表

R语言使用party包中的ctree函数构建条件推理决策树(Conditional inference trees)、使用plot函数可视化训练好的条件推理决策树、条件推理决策树的叶子节点的阴影区域表示的是阳性样本的比例

data+scenario+science+insight 1223

一图看懂 MAKO 的 Vulkan 图层链:为什么需要两个层角色与 WSI 隔离

MAKO 是为 Steam Deck、Steam Machine 和桌面 Linux 带来的下一代 Vulkan 图形层,提供帧生成(Frame Generation)、空间缩放(Scaling)与着色器效果。它内部其实由**两个独立加载的 Vulkan 层角色**组成,并刻意对 Gamescope WSI 图层做了**隔离**处理。本文用一张"链式图"讲清楚:这条链长什么样、两个角色各管什么、为

gitblog_00070的博客 760

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

宝典:第四式 图片上传插件Acts As Attachment

开始也是下载 在项目目录下面运行 [code="ruby"]script/plugin source http://svn.techno-weenie.net/projects/plugins[/code] 然后是安装 [code="ruby"] script/plugin install acts_as_attachment[/code] 创建dvd_cover模型 [code...

sayid21的专栏 137

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

图片上传插件Acts As Attachment

开始也是下载 在项目目录下面运行 Ruby代码   script/plugin source http://svn.techno-weenie.net/projects/plugins   然后是安装 Ruby代码   script/plugin install acts_as_attachment   创建dvd_cover模型 ...

xinlanzero 141

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

attachment_fu plug

Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp. C:\Documents and Settings\sunchaohui&gt;cd D:\radrails-0.7.2-win32\workspace\mm C:\Documents and Settings\sunchaohui&gt;d: D:\r...

sunchaohui_koko 207

Django 2.1.3 视图层 生成PDF

用Django输出PDF 本文档介绍了如何使用Django视图动态输出PDF文件。这是通过优秀的开源Python PDF库ReportLab 实现的。 动态生成PDF文件的优点是,您可以为不同目的创建自定义PDF,例如,针对不同用户或不同内容。 例如,Django在kusports.com上使用,为参与March Madness比赛的人们生成定制的,适合打印的NCAA锦标赛PDF文件。 安装Rep...

百年da孤独 的专栏 740

Flask文件下载send_from_directory中文报错处理

之前因为flask_restful接受中文参数有问题改了系统默认编码 sys.setdefaultencoding('utf8') 本来以为之后就没有中文问题了,没想到文件下载send_from_directory有个坑,运行下面代码报错 return send_from_directory(dirpath, filename, as_attachment=True) TypeErr...

kalulioo的博客 9285

flask 返回json_轻松掌握文件下载,详解flask中的send_file

在flask中的文件下载使用后端实现中,我们经常会让用户访问一个URL时下载一个文件. 在flask中直接使用send_file即可.最简单的send_file如下我们看下效果可以看到,直接send_file时flask直接返回了文件内容,效果和我们自己的用open+read读出内容并返回一样,浏览器没有识别成一个文件下载.要浏览器识别为文件下载的话,需要加上as_attachment=True这...

weixin_39907157的博客 7573

flask send_file&send_from_directory

flask.send_file(filename_or_fp, mimetype=None, as_attachment=False, attachment_filename=None, add_etags=True, cache_timeout=None, conditional=False, last_modified=None) 参数 说明 filename_or_fp 需要发送

Claroja 1万+

flask下载excel文件

flask提供了send_from_directory方法来下载文件,使用很方便,但是在下载的文件名中包含中文就会出问题。 修改之前的代码: send_from_directory(dir_path, file_name, as_attachment=True, attachment_filename="中文名.xlsx") # dir_path: 要下载的文件的文件夹 # file_name: 要下载的文件名 # attachment_fi

python_tty的专栏 1699

Django(第二周)

Django第二周

1216

Django实现文件下载功能

StreamingHttpResponse初始化参数streaming_content 和形参*args 、**kwargs。参数streaming_content的数据格式可设为迭代器对象或字节流,代表数据或文件内容。*args、**kwargs设置HttpResponseBase的参数,即响应内容的数据格式content_type 和响应状态码status等参数。FileResponse初始化参数as_attachment 和filename。

ASS-ASH的博客 6829

ruby项目文件上传功能实现

这里我将从视图、控制器各个层面进行讲解。 rails 提供了文件上传功能,可以直接进行下面的编码 <%= form_for :document, :html =>{:multipart => true} do |f| %> <%= f.file_field :file %> <%= f.submit "Upload" %> &...

weixin_30699463的博客 286

flask 下载文件

from flask import Flask, send_file, Response, send_from_directory import io app = Flask(__name__) def file_send(file_path): # 发送大文件可以该方法 with open(file_path, 'rb') as f: while 1: data = f.read(20 * 1024 * 1024) # 每次读取20M

qq_42886289的博客 5457
上一篇: RuntimeError (!!! Missing the mysql2 gem. Add it to your Gemfile: gem ‘mysql2′):
下一篇: 使用 HTML 5 支持移动 Web 应用程序离线工作
xinlanzero
博客等级 码龄25年 10粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值