問題
- 再現するための手順
- 新しいブログのエントリーを追加する
- このブログのエントリに新しいカバー画像を追加する
- エントリーを保存する
- 期待される動作画像はアップロードされます
- 現在の動作です:エラーがスローされ、ログにこれに似たエラーが見つかりました:
ERROR com.liferay.blogs.web.internal.portlet.action.EditEntryMVCActionCommand - com.liferay.portal.kernel.exception.PortalException: Unable to get a unique file name for image.png in folder 75309953
com.liferay.portal.kernel.exception.PortalException: Unable to get a unique file name for image.png in folder 75309953
at com.liferay.portlet.blogs.BlogsEntryAttachmentFileEntryHelper.getUniqueFileName(BlogsEntryAttachmentFileEntryHelper.java:206)
at com.liferay.portlet.blogs.BlogsEntryAttachmentFileEntryHelper.addBlogsEntryAttachmentFileEntry(BlogsEntryAttachmentFileEntryHelper.java:100)
at com.liferay.portlet.blogs.BlogsEntryAttachmentFileEntryHelper.addBlogsEntryAttachmentFileEntries(BlogsEntryAttachmentFileEntryHelper.java:55)
at com.liferay.blogs.web.internal.portlet.action.EditEntryMVCActionCommand.updateEntry(EditEntryMVCActionCommand.java:548)
at com.liferay.blogs.web.internal.portlet.action.EditEntryMVCActionCommand$UpdateEntryCallable.call(EditEntryMVCActionCommand.java:677)
at com.liferay.blogs.web.internal.portlet.action.EditEntryMVCActionCommand$UpdateEntryCallable.call(EditEntryMVCActionCommand.java:673)
at com.liferay.portal.spring.transaction.TransactionInvokerImpl$CallableMethodInvocation.proceed(TransactionInvokerImpl.java:101)
at com.liferay.portal.spring.transaction.DefaultTransactionExecutor.execute(DefaultTransactionExecutor.java:54)
at com.liferay.portal.spring.transaction.TransactionInvokerImpl.invoke(TransactionInvokerImpl.java:47)
at com.liferay.portal.kernel.transaction.TransactionInvokerUtil.invoke(TransactionInvokerUtil.java:28)
at com.liferay.blogs.web.internal.portlet.action.EditEntryMVCActionCommand.doProcessAction(EditEntryMVCActionCommand.java:192)
at com.liferay.portal.kernel.portlet.bridges.mvc.BaseMVCActionCommand.processAction(BaseMVCActionCommand.java:61)
at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.callActionMethod(MVCPortlet.java:380)
at com.liferay.portal.kernel.portlet.LiferayPortlet.processAction(LiferayPortlet.java:93)
at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.processAction(MVCPortlet.java:260)
Environment
- 7.0+
解決策
- ブログの添付ファイルは共通フォルダーに保存されます。 そのため、Liferayでは、使用された名前が検出された場合、ファイルに接尾辞を追加して名前の衝突を処理します。
- とにかく、パフォーマンスの問題を避けるために、この自動生成される名前を50個に制限しています。
- BlogsEntryLocalServiceImpl#getUniqueFileName メソッドのロジックに基づき、 CheckBlogsUniqueFileNameLogic.groovyのようなスクリプトを実行すると確認できます(Liferayのバージョンによって異なる場合があります。)。
- この変数を適切なものに調整するだけでいいのです:
def groupId = [group id]Ldef fileName = "[ファイル名]"def folderId = [folder id]L - そして、それを実行する。
- それが終わると、最後に例外を含むプロセスの詳細情報を見ることができます。
- 例外が発生する前に50個の要素に達してしまった場合は...。
image (50).png
- ...すると、ファイル名自動生成の限界に達したことが確認されます。
- 問題を解決(回避)するためには、未使用の画像を削除するか、今後この名前を使用しないようにすればよいでしょう。
- 私たちの提案は、衝突を最小限に抑えるために、すべてのケースで最も説明的な画像名を使用するようにすることです。
- 性能に影響を与えるため、この制限をカスタマイズすることは推奨されません。
追加情報