实现model中的文件上传FTP(一)
由于在django的model中配置了filefield或者imagefield配置了upload_to参数只能将用户上传的文件上传到项目本地,就算重定向到项目外也只是直接读取文件系统,这样对未来的项目迁移或者资源管理都会造成很大的困扰,而且这种方式总觉得不太符合规范,所以找了一些资料将文件上传直接上传到FTP
一.django-storages
django的存储是通过一个叫做storages的类实现的,你可以看到在model的很多filed中都有storages=的参数选项,如果不设置,默认就是default_storage也就是FileSystemStorage,这个类也是继承的Storages基类

所以如果想要实现FTP存储可以自己重写一个storage,也可以去找个轮子
1.自己写,参考 https://www.cnblogs.com/linxiyue/p/7456004.html
2.找现成的轮子,我找到这个第三方的storages 可以实现ftp和sftp,当然还有一些其他的方式存储,我没有过多研究,这个里面都有 https://github.com/jschneier/django-storages
安装可以通过pip
pip install django-storages
或者其他的安装方式在github上都有写,可以参考一下,安装成功之后在python包路径里是叫storages,这里注意一下,否则容易import的时候找不到,我也踩过坑
二.models设置
from storages.backends.ftp import FTPStorage
#FTP
from storages.backends.sftpstorage import SFTPStorage
#SFTP
st = FTPStorage()
#使用sftp可以用SFTPStorage()
class Test(models.Model):
test = models.ImageField(upload_to='test', storage=st)
三.setting设置
# FTP
FTP_STORAGE_LOCATION = 'ftp://user:passwd@host/path'
以上三步配置完后,就可以直接将model中的某个文件直接上传到FTP了,而数据库中相应的字段存储的只是一个文件路径
实现model中的文件上传FTP(一)的更多相关文章
- 实现model中的文件上传FTP(二)
上一篇博客记录了如何将model中的图片存入FTP,通过一个第三方的storages简单的实现了,但是后续我发现如果想在浏览器通过url直接获取图片,就不太容易了(大神轻喷,小弟自学django和py ...
- Java中的文件上传和下载
文件上传原理: 早期的文件上传机制: 在TCP/IP中.最早出现的文件上传机制是FTP.他是将文件由客户端发送到服务器的标准机制. jsp中的文件上传机制: 在jsp编程中不能使用FTP的方法来上传文 ...
- IIS 7 中设置文件上传大小的方法
在IIS 6.0中设置文件上传大小的方法,就是配置如下节点: <system.web> <httpRuntime maxRequestLength="1918200&quo ...
- 在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件(转)
引言 这两天沉迷了Google SketchUp,刚刚玩够,一时兴起,研究了一下WebBrowser. 我在<WebBrowser控件使用技巧分享>一文中曾谈到过“我现在可以通过WebBr ...
- PHP中,文件上传实例
PHP中,文件上传一般是通过move_uploaded_file()来实现的. bool move_uploaded_file ( string filename, string destinati ...
- MVC中的文件上传-小结
web开发中,文件的上传是非常基本功能之一. 在asp.net中,通常做法是利用webservice 来接收文件请求,这样做的好处就是全站有了一个统一的文件上传接口,并且根据网站的实际情况,可以将we ...
- ASP.NET中的文件上传大小限制的问题
一.文件大小限制的问题 首先我们来说一下如何解决ASP.NET中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改WEB.Config文 ...
- struts2中的文件上传,文件下载
文件上传: Servlet中的文件上传回顾 前台页面 1.提交方式post 2.表单类型 multipart/form-data 3.input type=file 表单输入项 后台 apache提交 ...
- 转:在Struts 2中实现文件上传
(本文转自:http://www.blogjava.net/max/archive/2007/03/21/105124.html) 前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题 ...
随机推荐
- BZOJ 1724: [Usaco2006 Nov]Fence Repair 切割木板 贪心 + 堆 + 反向思考
Description Farmer John想修理牧场栅栏的某些小段.为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50, ...
- PAT_A1078#Hashing
Source: PAT A1078 Hashing (25 分) Description: The task of this problem is simple: insert a sequence ...
- [kuangbin带你飞]专题1-23题目清单总结
[kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...
- Keil
Keil C51 V9.00 即09年发布的最新版本uVision 4,版本外观改变比较大,可以使用以前的注册文件.如果全新安装,在VISTA或者WIN 7系统下,请使用管理员方式运行,然后注册即可无 ...
- vue自定义拖动指令
1.在项目开发中,需要对div进行拖动.因为需要自定义组件 a>定义全局拖拽指令: 定义全局指令,需要在main.js中写入vue.directive('drag',{});即可.但是一般会在外 ...
- php去除h5标签
function html2text($str){ $str = preg_replace("/<style .*?<\\/style>/is", " ...
- mysql中的高级查询语句
此随笔用到的数据全是来自 关于mysql中表关系的一些理解(一对一,一对多,多对多) 提及的 学院表,学生表,学生详情表,选课表,课程表 单标查询:(查看学生表的学生名单) select st ...
- mongodb--update高级用法
配合update使用的函数 $set 修改某列的值 $unset 删除某个列 $rename 重命名某个列 $inc 增长某个列 $setOnInsert 当upsert为true时,并且发生了ins ...
- 阶梯博弈&POJ 1704
阶梯博弈: 先借用别人的一幅图片.(1阶梯之前还有一个0阶梯未画出) 阶梯博弈的最初定义是这样的:每一个阶梯只能向它的前一个阶梯移动本阶梯的点,直至最后无法移动的为输. 那么,利用NIM,只计算奇数级 ...
- [\S\s]+ 可以匹配多行html,最常用的还是.*?
[\S\s]+ 可以匹配多行html,最常用的还是.*?