OpenProject 的 Wiki 上传「中文文件名」的文件无法查看

使用 OpenProject 一个月中,团队逐渐开始做任务管理、缺陷管理和工时管理,接下来要将内部文档用 Wiki 管理。

问题描述

我试着在 Wiki 写了份 PRD,文中引用的图片是中文文件名,遇到了两个问题

  • 引用处无法显示

  • 点击文末的链接提示 500 系统错误

错误日志

I, [2015-12-23T12:50:50.886339 #21693]  INFO -- : Started GET "/attachments/37" for 116.226.86.102 at 2015-12-23 12:50:50 +0800
I, [2015-12-23T12:50:50.889672 #21693]  INFO -- : Processing by AttachmentsController#download as HTML
I, [2015-12-23T12:50:50.889744 #21693]  INFO -- :   Parameters: {"id"=>"37"}
I, [2015-12-23T12:50:50.904787 #21693]  INFO -- : OpenProject User: Jonathan Gu (jonathan.gu@jiaj.com.cn ID: 3 <jonathan.gu@jiaj.com.cn>)
I, [2015-12-23T12:50:50.923084 #21693]  INFO -- : Completed 500 Internal Server Error in 33ms (ActiveRecord: 19.9ms)
F, [2015-12-23T12:50:50.924275 #21693] FATAL -- :
URI::InvalidURIError (bad URI(is not URI?): /opt/openproject/files/attachment/file/37/02_分享效果图.png):
  app/models/attachment.rb:62:in `external_url'
  app/controllers/attachments_controller.rb:36:in `download'
  app/middleware/params_parser_with_exclusion.rb:40:in `call'
I, [2015-12-23T12:50:58.442689 #21693]  INFO -- : Started GET "/attachments/37/02_%e5%88%86%e4%ba%ab%e6%95%88%e6%9e%9c%e5%9b%be.png" for 116.226.86.102 at 2015-12-23 12:50:58 +0800
I, [2015-12-23T12:50:58.446375 #21693]  INFO -- : Processing by AttachmentsController#download as HTML
I, [2015-12-23T12:50:58.446447 #21693]  INFO -- :   Parameters: {"id"=>"37", "filename"=>"02_分享效果图.png"}
I, [2015-12-23T12:50:58.461368 #21693]  INFO -- : OpenProject User: Jonathan Gu (jonathan.gu@jiaj.com.cn ID: 3 <jonathan.gu@jiaj.com.cn>)
I, [2015-12-23T12:50:58.478570 #21693]  INFO -- : Completed 500 Internal Server Error in 32ms (ActiveRecord: 18.4ms)
F, [2015-12-23T12:50:58.479710 #21693] FATAL -- :
URI::InvalidURIError (bad URI(is not URI?): /opt/openproject/files/attachment/file/37/02_分享效果图.png):
  app/models/attachment.rb:62:in `external_url'
  app/controllers/attachments_controller.rb:36:in `download'
  app/middleware/params_parser_with_exclusion.rb:40:in `call'

解决方案

根据错误提示,找到 app/models/attachement.rb 文件,确保 URI.parse 前使用 URI.escape 转义。

修改前代码

   def external_url
     url = URI.parse file.download_url # returns a path if local
     url if url.host
   end

修改后代码

   def external_url
     escaped_url = URI.escape file.download_url
     url = URI.parse escaped_url # returns a path if local
      url if url.host
   end

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值