非ascii文件名的Zope ftp上载错误

非ascii文件名的Zope ftp上载错误,ftp,zope,non-ascii-characters,Ftp,Zope,Non Ascii Characters,当我试图通过FTP将带有非ascii字符(如德语umlauts)的文件上载到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

当我试图通过FTP将带有非ascii字符(如德语umlauts)的文件上载到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_工厂,以便上传的文件将作为我的自定义对象类型之一添加到ZODB中。在这个类的
\uuuu init\uuuu
中,我将文件名更改为一个字符串,该字符串在Zope中是有效的id。我已将
self.\u\u name\u
和self.id设置为此字符串,但错误仍然存在

为了进行调试,我在
\uuuu init\uuuu
的最后一行引发了一个异常

raise Exception, self.id
这给了我正确的有效id。但是当我删除最后一行时,我再次得到上面的错误。显然,不会创建新对象(不会调用manage_afterAdd方法)


有没有办法绕过这一点,或者这是我不得不忍受的Zope的局限性?

不幸的是,恐怕你被卡住了。正在上载的对象的
\u名称\u
将被完全忽略

结果是:

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

如您所见,
名称
变量未更新


您可以提交一份请求,请求在那里查阅
\uuuu name\uuuuuuuu

Thanx!我将把这个问题归档,暂时接受它:)
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)