待辦事項 #28120

"新規フローチャートのサマリー情報が編集できない.PNG"というファイル名のファイルを添付するとos.open()で落ちる

啟用日期: 2012-04-18 10:37 最後更新: 2012-04-25 11:09

回報者:
負責人:
(無)
類型:
狀態:
關閉
元件:
(無)
里程碑:
(無)
優先權:
5 - 中
嚴重程度:
5 - 中
處理結果:
Won't Fix
檔案:

細節

別のファイル名にリネームしたら問題なく添付できる。

trac.logは下記のとおり。

2012-04-18 10:16:12,953 Trac[main] ERROR: Internal Server Error: 
Traceback (most recent call last):
  File "D:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\web\main.py", line 511, in _dispatch_request
    dispatcher.dispatch(req)
  File "D:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\web\main.py", line 237, in dispatch
    resp = chosen_handler.process_request(req)
  File "D:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\attachment.py", line 448, in process_request
    self._do_save(req, attachment)
  File "D:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\attachment.py", line 684, in _do_save
    attachment.insert(filename, upload.file, size)
  File "D:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\attachment.py", line 262, in insert
    filename))
  File "D:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\util\__init__.py", line 231, in create_unique_file
    return path, os.fdopen(os.open(path, flags, 0666), 'w')
OSError: [Errno 2] No such file or directory

Ticket History (3/4 Histories)

2012-04-18 10:37 Updated by: babydaemons
  • New Ticket ""新規フローチャートのサマリー情報が編集できない.PNG"というファイル名のファイルを添付するとos.open()で落ちる" created
2012-04-18 15:08 Updated by: jun66j5
評語

添付ファイルを格納する際にファイル名を encode して格納します。その際にできあがる名前が長すぎるためです。

また、その場合に Windows があげてくる例外が実情を反映しない No such file or directory となります。 Linux であれば OSError: 36 File name too long などとなります。

そのファイル名だと encode 後のファイル名の部分だけで211文字あります。Windows ではファイル名の最大長は260文字です。

>>> s = u'新規フローチャートのサマリー情報が編集できない.PNG'
>>> import urllib
>>> urllib.quote(s.encode('utf-8'))
'%E6%96%B0%E8%A6%8F%E3%83%95%E3%83%AD%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%E3%81%AE%E3%82%B5%E3%83%9E%E3%83%AA%E3%83%BC%E6%83%85%E5%A0%B1%E3%81%8C%E7%B7%A8%E9%9B%86%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84.PNG'
>>> len(urllib.quote(s.encode('utf-8')))
211

2012-04-18 19:14 Updated by: jun66j5
評語

ところでどういう挙動を期待されていますか?

Trac 0.13 では添付ファイルパスが長くなり過ぎないようにファイル名の SHA-1 ハッシュを元にしたファイルパスで保存するようになります。 http://trac.edgewall.org/ticket/10313

2012-04-25 11:09 Updated by: jun66j5
  • 處理結果 Update from to Won't Fix
  • 狀態 Update from 開啟 to 關閉
  • Ticket Close date is changed to 2012-04-25 11:09
評語

ということで Trac の仕様なので直しようがありません。 Windows のパス長が短すぎるんです :(

Attachment File List

No attachments

編輯

Please login to add comment to this ticket » 登入