Python 3.5无法读取zipfile

问题描述

我正在使用https://github.com/overhangio/openedx-scorm-xblock和openx的杜松版本。在我尝试上传zip文件时配置了所有S3存储桶后,出现此错误

Internal Server Error: /xblock/block-v1:EDX+E101+2020_E+type@scorm+block@57eff9f97a5c41248eea66bf9e4c92f8/handler/studio_submit
Traceback (most recent call last):
  File "/edx/app/edxapp/venvs/edxapp/lib/python3.5/site-packages/django/core/handlers/exception.py",line 34,in inner
    response = get_response(request)
  File "/edx/app/edxapp/venvs/edxapp/lib/python3.5/site-packages/django/core/handlers/base.py",line 115,in _get_response
    response = self.process_exception_by_middleware(e,request)
  File "/edx/app/edxapp/venvs/edxapp/lib/python3.5/site-packages/django/core/handlers/base.py",line 113,in _get_response
    response = wrapped_callback(request,*callback_args,**callback_kwargs)
  File "/usr/lib/python3.5/contextlib.py",line 30,in inner
    return func(*args,**kwds)
  File "/edx/app/edxapp/venvs/edxapp/lib/python3.5/site-packages/django/contrib/auth/decorators.py",line 21,in _wrapped_view
    return view_func(request,*args,**kwargs)
  File "/edx/app/edxapp/edx-platform/cms/djangoapps/contentstore/views/component.py",line 478,in component_handler
    resp = handler_descriptor.handle(handler,req,suffix)
  File "/edx/app/edxapp/venvs/edxapp/lib/python3.5/site-packages/xblock/mixins.py",line 89,in handle
    return self.runtime.handle(self,handler_name,request,suffix)
  File "/edx/app/edxapp/edx-platform/common/lib/xmodule/xmodule/x_module.py",line 1453,in handle
    return super(MetricsMixin,self).handle(block,suffix=suffix)
  File "/edx/app/edxapp/venvs/edxapp/lib/python3.5/site-packages/xblock/runtime.py",line 1063,in handle
    results = handler(request,suffix)
  File "/edx/app/edxapp/venvs/edxapp/lib/python3.5/site-packages/openedxscorm/scormxblock.py",line 228,in studio_submit
    with zipfile.ZipFile(package_file,"r") as scorm_zipfile:
  File "/usr/lib/python3.5/zipfile.py",line 1026,in __init__
    self._RealGetContents()
  File "/usr/lib/python3.5/zipfile.py",line 1089,in _RealGetContents
    endrec = _EndRecData(fp)
  File "/usr/lib/python3.5/zipfile.py",line 241,in _EndRecData
    fpin.seek(0,2)
ValueError: I/O operation on closed file.

实际上导致此错误代码块是 https://github.com/overhangio/openedx-scorm-xblock/blob/master/openedxscorm/scormxblock.py#L189

        with zipfile.ZipFile(package_file,"r") as scorm_zipfile:
            for zipinfo in scorm_zipfile.infolist():
                # Do not unzip folders,only files. In Python 3.6 we will have access to
                # the is_dir() method to verify whether a ZipInfo object points to a
                # directory.
                # https://docs.python.org/3.6/library/zipfile.html#zipfile.ZipInfo.is_dir
                if not zipinfo.filename.endswith("/"):
                    default_storage.save(
                        os.path.join(self.extract_folder_path,zipinfo.filename),scorm_zipfile.open(zipinfo.filename),)

我已经尝试了很多方法,但仍然找不到该问题的实际解决方案。我在这里做错的任何建议。

在AWS s3存储桶中,当我尝试使用此scorm xblock上传zip文件时,也会创建一些zip文件

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)