django与fastdfs交互出错 服务器上的fastdfs测试可用

Traceback:

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner 34. response = get_response(request)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response 126. response = self.process_exception_by_middleware(e, request)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response 124. response = wrapped_callback(request, callback_args, *callback_kwargs)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/contrib/admin/options.py" in wrapper 604. return self.admin_site.admin_view(view)(args, *kwargs)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapped_view 142. response = view_func(request, args, *kwargs)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 44. response = view_func(request, args, *kwargs)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/contrib/admin/sites.py" in inner 223. return view(request, args, *kwargs)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/contrib/admin/options.py" in add_view 1637. return self.changeform_view(request, None, form_url, extra_context)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapper 45. return bound_method(args, *kwargs)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapped_view 142. response = view_func(request, args, *kwargs)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/contrib/admin/options.py" in changeform_view 1525. return self._changeform_view(request, object_id, form_url, extra_context)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/contrib/admin/options.py" in _changeform_view 1564. self.save_model(request, new_object, form, not add)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/contrib/admin/options.py" in save_model 1091. obj.save()

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/base.py" in save 718. force_update=force_update, update_fields=update_fields)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/base.py" in save_base 748. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/base.py" in _save_table 831. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/base.py" in _do_insert 869. using=using, raw=raw)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/manager.py" in manager_method 82. return getattr(self.get_queryset(), name)(args, *kwargs)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/query.py" in _insert 1136. return query.get_compiler(using=using).execute_sql(return_id)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/sql/compiler.py" in execute_sql 1288. for sql, params in self.as_sql():

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/sql/compiler.py" in as_sql 1241. for obj in self.query.objs

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/sql/compiler.py" in 1241. for obj in self.query.objs

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/sql/compiler.py" in 1240. [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/sql/compiler.py" in pre_save_val 1192. return field.pre_save(obj, add=True)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/fields/files.py" in pre_save 288. file.save(file.name, file.file, save=False)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/db/models/fields/files.py" in save 87. self.name = self.storage.save(name, content, max_length=self.field.max_length)

File "/Users/xion/venvs/dailyfresh/lib/python3.7/site-packages/django/core/files/storage.py" in save 49. return self._save(name, content)

File "/Users/xion/python/bj18/dailyfresh/utils/fdfs/storage.py" in _save 36. raise Exception('上传文件到fastdfs失败')

Exception Type: Exception at /admin/goods/goodstype/add/ Exception Value: 上传文件到fastdfs失败

请教一下懂的大佬,谢谢

评论 5

  • pycharm还有提示

    getting connection <fdfs_client.connection.Connection object at 0x108d285c0> <fdfs_client.fdfs_protol.Tracker_header object at 0x108d28ef0> Internal Server Error: /admin/goods/goodstype/add/

    "POST /admin/goods/goodstype/add/ HTTP/1.1" 500 178521

  • from django.core.files.storage import Storage from django.conf import settings from fdfs_client.client import Fdfs_client from django.utils.deconstruct import deconstructible

    @deconstructible class FDFSStorage(Storage): '''fast dfs文件存储类''' def init(self,client_conf=None,base_url=None): '''初始化''' if client_conf is None: client_conf = settings.FDFS_CLIENT_CONF self.client_conf = client_conf if base_url is None: base_url = settings.FDFS_SERVER_URL self.base_url = base_url

    def _open(self,name,mode=&#x27;rb&#x27;):
        &#x27;&#x27;&#x27;打开文件时使用&#x27;&#x27;&#x27;
        pass
    
    def _save(self,name,content):
    
        #name:你选择上传文件的名字
        #content:包含上传文件内容的File对象
    
        #创建一个Fdfs_client对象
        client = Fdfs_client(self.client_conf)
    
        #上传文件到fast dfs系统
        res = client.upload_by_buffer(content.read())
    
    
        if res.get(&#x27;Status&#x27;) != &#x27;Upload successed&#x27;:
            #上传失败
            raise Exception(&#x27;上传文件到fastdfs失败&#x27;)
    
        filename = res.get(&#x27;Remote file_id&#x27;)
        return filename
    
    def exists(self,name):
    
        return False
    
    def url(self,name):
        &#x27;返回访问&#x27;
        return settings.FDFS_SERVER_URL+name

  • 另外 由于服务器80 8888端口有程序占用 将nginx改为 server { listen 9999; server_name localhost; location ~/group[0-9]/ { ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }

    server {
        listen       8898;
        server_name  localhost;
    
        #charset koi8-r;
    
        #access_log  logs/host.access.log  main;
    
        location / {
            root   html;
            index  index.html index.htm;
        }
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

  • connect timeout in seconds

    default value is 30s

    connect_timeout=30

    network timeout in seconds

    default value is 30s

    network_timeout=60

    the base path to store log files

    base_path=/Users/xion/djtest/log

    tracker_server can ocur more than once, and tracker_server format is

    "host:port", host can be hostname or ip address

    tracker_server=服务器ip:22122

    standard log level as syslog, case insensitive, value list:

    emerg for emergency

    alert

    crit for critical

    error

    warn for warning

    notice

    info

    debug

    log_level=info

    if use connection pool

    default value is false

    since V4.05

    use_connection_pool = false

    connections whose the idle time exceeds this time will be closed

    unit: second

    default value is 3600

    since V4.05

    connection_pool_max_idle_time = 3600

    if load FastDFS parameters from tracker server

    since V4.05

    default value is false

    load_fdfs_parameters_from_tracker=false

    if use storage ID instead of IP address

    same as tracker.conf

    valid only when load_fdfs_parameters_from_tracker is false

    default value is false

    since V4.05

    use_storage_id = false

    specify storage ids filename, can use relative or absolute path

    same as tracker.conf

    valid only when load_fdfs_parameters_from_tracker is false

    since V4.05

    storage_ids_filename = storage_ids.conf

    HTTP settings

    http.tracker_server_port=80

    use "#include" directive to include HTTP other settiongs

    include http.conf

    pycharm下的client.conf文件