非ascii文件名的Zope ftp上载错误
当我试图通过FTP将带有非ascii字符(如德语umlauts)的文件上载到Zope(到ZODB中)时,我收到以下错误消息:非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
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)