实现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了,而数据库中相应的字段存储的只是一个文件路径

 

posted on 2018-04-09 17:44  小小白鸽  阅读(388)  评论(0编辑  收藏  举报