2017-11-01 2 views
1

문서 및 미디어에서 다운로드 한 모든 파일을 추적하고자하므로 파일을 다운로드 할 때 URL을 가져 오는 서블릿 필터를 작성했습니다. 내 감사 내가 다운로드 한 파일에 대한 세부 사항을 적어 싶습니다에서문서 및 미디어 다운로드 URL 해독

http://s/documents/20143/32701/SomeFile.txt/da99a46a-8231-2a87-ff8d-8d3b2d388c24 
http://s/documents/20143/0/invoice_ABC.pdf/c44fd479-331b-f393-7879-973c5cecf086 

을, 그래서 나는 그 URL에서 정보를 추출해야 UI에 파일이 다운로드되는 곳부터 따라, 다음과 같이 할 수 있습니다.

URL의 각 부분은 무엇입니까?

참고 : 위의 매개 변수를이 순서로 사용하는 것은 위험하지만 감사를 수행 할 때 OSGi 모듈에서 다운로드 할 수있는 Java 코드를 재정의 할 수 없으므로 더 나은 옵션이 없다고 생각합니다.

답변

1
  • http://s : 분명히 프로토콜과 서버 이름.
  • documents : 키워드는 항상 동일합니다.

다음은 최대 네 부분까지의 경로입니다.

  • http://s/documents/80327

    • 80327 : 부품의 수에 따라 서로 다른 의미를 가질 수 FileShortcut의 ID를 (DLFileShortcut.fileShortcutId)는
    • 파일 엔트리가 발견 될 수 DLAppServiceUtil.getFileEntry(DLAppServiceUtil.getFileShortcut(80327).getToFileEntryId())
  • http://s/documents/20143/da99a46a-8231-2a87-ff8d-8d3b2d388c24

    ,515,
    • 20143 : 파일 엔트리 (DLFileEntry.groupId)
    • da99a46a-8231-2a87-ff8d-8d3b2d388c24가 속하는 사이트/그룹의 ID : 파일 엔트리의 UUID (DLFileEntry.uuid)
    • 파일 엔트리가 발견 될 수 DLAppServiceUtil.getFileEntryByUuidAndGroupId("da99a46a-8231-2a87-ff8d-8d3b2d388c24", 20143)
  • http://s/documents/20143/32701/SomeFile.txt

    • ,178,664,599,183,317,303,210 : 사이트/그룹의 ID는 파일 항목 (DLFileEntry.groupId)
    • 32701 속한 : 인코딩 된 특수 문자, 파일 이름 : 폴더의 ID가 파일 항목 (DLFileEntry.folderId)
    • SomeFile.txt을 속한 DLAppServiceUtil.getFileEntry(20143, 32701, HttpUtil.decodeUrl("SomeFile.txt"))
  • http://s/documents/20143/32701/SomeFile.txt/da99a46a-8231-2a87-ff8d-8d3b2d388c24

    : 같은 URL 이스케이프 시퀀스 (DLFileEntry.name)
  • 파일 항목은 발견 할 수있다
    • 20143 : 파일 항목 (DLFileEntry.groupId)
    • 32701을 속한 사이트/그룹의 ID : 폴더의 ID는 파일 항목이 속해있는 -
    • SomeFile.txt
    • 을 무시 : 파일의 이름은 - 무시
    • da99a46a-8231-2a87-ff8d-8d3b2d388c24 : 파일 항목의 UUID입니다. (DLFileEntry.uuid)
    • 파일 항목이 발견 될 수있다 DLAppServiceUtil.getFileEntryByUuidAndGroupId("da99a46a-8231-2a87-ff8d-8d3b2d388c24", 20143)

을 Liferay는 일반적으로 이동 또는 이름 변경에 대해 경화 다소 "친숙한"URL을 가지고 마지막 형식의 URL을 생성 파일.

주목할만한 부재는 회사 ID이며 DLFileEntry.companyId 또는 Group.companyId에서 검색 할 수 있습니다.

경고 : 향후 요소 및 순서가 변경 될 수 있습니다. 현재 구현은 com.liferay.portal.webserver.WebServerServlet.getFileEntry(String[] pathArray)에서 찾을 수 있습니다.

이것은 커뮤니티 위키의 답변이므로 정보를 추가/수정하려면 자유롭게 편집하십시오.