# Django 默认存储方式:
# settings.py
MEDIA_DIR = 'media'
MEDIA_ROOT = os.path.join(os.path.join(BASE_DIR, 'static'), 'media')
        
# models.py
goods_img = models.ImageField(upload_to="goods/")    # 图片将上传到 "media/goods"目录中




# 指定存储路径
# models.py
import os
from django.conf import settings
from django.core.files.storage import FileSystemStorage
class ...
    path = FileSystemStorage(location=os.path.join(settings.BASE_DIR, 'media/'))    
    photo = models.ImageField(storage=path)    # 图片将上传到指定的path目录, MEDIA_ROOT不再起作用





# 使用fdfs存储文件
# settings.py
DEFAULT_FILE_STORAGE = "utils.fdfs.FDFSStorage.FdfsStorage"  #FDFSStorage(py),FdfsStorage(class)
FDFS_BASE_URL = "http://192.168.192.154:8888/"
FDFS_CLIENT_CONFIG = "utils/fdfs/client_conf"

# 根目录新建python package utils/fdfs
# 在fdfs新建:    client_conf        # client配置文件, 可以从linux copy
        
FDFSStorage.py
        
# encoding=utf8
from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client
from django.conf import settings
class FdfsStorage(Storage):
    def __init__(self, client_conf=None, base_url=None):
        if client_conf is None:
            client_conf = settings.FDFS_CLIENT_CONFIG
         self.client_conf = client_conf
         if base_url is None:
                base_url = settings.FDFS_BASE_URL
         self .base_url = base_url
        
        def _open(self, name, mode="rb"):
            pass

        def _save(self, name, content):
            name = name.replace("\\", "/")
            client = Fdfs_client(self.client_conf)
            res = client.upload_by_buffer(content.read())
            """ dict{
                'Group name': group_name,
                'Remote file_id': remote_file_id,
                'Status': 'Upload successed.',
                'Local file name': '',
                'Uploaded size': upload_size,
                'Storage IP': storage_ip
            }"""
            if res.get("Status", "") != 'Upload successed.':
                raise Exception(u"上传文件到fdfs失败")
                filename = res.get("Remote file_id")
                return filename

            def exists(self, name):
                return False

            def url(self, name):
                name = name.replace("\\", "/")
                return self.base_url + name



# 在tests.py中测试:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "projectname.settings")
import django
django.setup()

from app01.models import Tea, Stu

t = Tea.objects.get(name='x')
s = Stu.objects.get(name='xx')
print t.imgFeild.url # 通过imgFeild.url属性 访问文件的路径
print s.imgFeild.url