【问题标题】:Zope ftp-upload error with non-ascii filenames带有非 ASCII 文件名的 Zope ftp-upload 错误
【发布时间】:2012-10-29 09:50:58
【问题描述】:

当我尝试通过 FTP 将具有非 ascii 字符(如德语变音符号)的文件上传到 Zope(进入 ZODB)时,我收到以下错误消息:

ERROR Zope.SiteErrorLog 1351502922.570.290289062967 http://0.0.0.0:8021/Zope2/websites/O%CC%88su%CC%88ra%CC%88ich.png/PUT
Traceback (innermost last):
  Module ZPublisher.Publish, line 126, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 46, in call_object
  Module webdav.NullResource, line 173, in PUT
  Module OFS.ObjectManager, line 325, in _setObject
  Module OFS.ObjectManager, line 97, in checkValidId
BadRequest: The id "Ösüräich.png" contains characters illegal in URLs.

这是有道理的。但是,我使用的是 PUT_factory,以便将上传的文件作为我的自定义对象类型之一添加到 ZODB。在此类的__init__ 中,我将文件名更改为在Zope 中是有效ID 的字符串。我已将 self.__name__ 和 self.id 设置为该字符串,但错误仍然存​​在。

为了调试,我在__init__ 的最后一行提出了一个异常

raise Exception, self.id

这给了我正确的有效身份证件。但是当我删除最后一行时,我再次收到上面的错误。显然,没有创建新对象(没有调用 manage_afterAdd 方法)。

有没有办法解决这个问题,还是我必须忍受 Zope 的限制?

【问题讨论】:

    标签: ftp zope non-ascii-characters


    【解决方案1】:

    很遗憾,你被卡住了,恐怕。正在上传的对象的__name__ 被完全忽略。

    会发生什么:

    • webdav.NullResource.NullResource 对象由发布者实例化
    • 调用此对象的 [.PUT() 方法]。
    • 以下代码是该方法的一部分,它创建对象并将其存储在父对象上(简化):

      factory = getattr(parent, 'PUT_factory', self._default_PUT_factory )
      ob = factory(name, typ, body)
      if ob is None:
          ob = self._default_PUT_factory(name, typ, body)
      
      # Verification it can be added here
      
      self.__parent__._setObject(name, ob)
      

    如您所见,name 变量未更新。

    您可以提交issue in the tracker 请求在那里咨询__name__

    【讨论】:

    • 谢谢!我会提出这个问题并暂时忍受它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2019-12-11
    相关资源
    最近更新 更多