제한적인 업로드 식별 코드로 인해 업로드된 자산을 사용하는 테마 컴포넌트 작성에 어려움이 있습니다

안녕하세요,

최근 저는 Discourse 테마 컴포넌트(GitHub - Beholder-Vision/discourse-insert-model-3d: A Discourse theme component for adding 3D models to topics · GitHub)를 작성했습니다. 이 컴포넌트는 Discourse 관리자가 포럼에서 3D 모델의 업로드와 표시를 활성화할 수 있도록 해줍니다.

처음에는 잘 작동하는 것 같았지만, 업로드된 일부 모델이 사라졌다는 보고를 받고 제 포럼을 확인해보니 업로드된 에셋(3D 모델과 포스터 이미지)도 정리(purge)되어 있음을 알게 되었습니다. Insert Model 3D - #2 by patrickemin

문서(Understanding Uploads, Images, and Attachments)를 읽었을 때, 업로드된 에셋은 게시물에 참조되고 있으므로 안전할 것이라고 생각했습니다. 하지만 좀 더 파고들어보니 서버에서 업로드를 식별하는 역할을 하는 것으로 보이는 이 코드(discourse/app/models/post.rb at 03bb43f7468d3aa6e73bba0805193ae50c7ec2d5 · discourse/discourse · GitHub)를 발견했습니다. 제가 파악한 바로는, 업로드된 파일이 게시물에 참조된 것으로 간주되려면 제한된 수의 HTML 태그 중 하나로 참조되어야 합니다. 따라서 <a> 요소의 href 속성으로 참조된 링크된 업로드는 인식되지만, <model-viewer> 요소의 src 속성으로 참조된 경우(제 새로운 테마 컴포넌트가 추가하는 것)에는 인식되지 않습니다.

해당 코드에 익숙한 분이 제 이해가 맞는지 확인해 주실 수 있을까요? 만약 제 이해가 맞다면, 테마 컴포넌트를 만드는 사람들이 에셋을 업로드로 표시하기 위해 해당 에셋을 참조하는 숨겨진 <a> 링크를 생성할 수 있을 것이라 생각합니다. 하지만 문서(Understanding Uploads, Images, and Attachments)에 이러한 함정이 강조되도록 업데이트되면 정말 유용할 것 같습니다.

감사합니다.
Alan

3개의 좋아요

파라미터와 src가 JSON 파싱에서 온 것이므로, 이를 자동으로 처리하는 것은 (최소한) 까다롭습니다.

근본적인 수준에서, 이는 API가 업로드를 게시물에 "단단히 연결"하고, 그것이 절대 정리되지 않도록 플래그를 설정하라고 요구하는 것과 같습니다.

이렇게 하면 다른 문제들이 터져 나올 가능성이 열립니다(단단히 연결된 업로드를 어디서 볼 수 있습니까? 제한 사항은 무엇입니까?).

그럼에도 불구하고, 단단히 연결하는 것이 이 문제를 해결하는 유일한 깔끔한 방법처럼 느껴집니다.

숨겨진 링크는 실제로 우회책으로 작동할 것입니다.

이는 의도된 대로 작동하고 있지만, API가 사용자의 삶을 쉽게 만들어 주지 못하고 있으므로, 이를 기능 요청으로 변경합니다.

더 많은 생각이 있을 수 있는 dev-xp 팀에게 이 문제를 알리겠습니다.