업로드된 파일 이름 변경

최근에 학술 발표 자료의 PDF 파일을 업로드하고 있습니다(마침 계절 기후 예보에 관한 이 토픽에).

제가 사용하는 파일 이름 규칙은 다음과 같습니다:

  • 0000-leadauthor-[etal-]title-title-title.pdf

이 부분은 잘 되고 있습니다. 그런데 제1저자의 이름을 잘못 적었다는 것을 발견했습니다. 그러나 수정된 파일 이름으로 동일한 파일을 업로드하려고 하면, Discourse가 파일 내용이 동일하다는 것을 감지합니다(여기서 어떤 해싱 과정이 이루어지는 것 같습니다). 그리고 파일 이름은 그대로(아직도 잘못된 상태로) 유지된 채로 원래 파일에 대한 참조를 제공합니다.

제 우회 방법은 다음과 같은 설정을 1(기본값은 48입니다)로 변경하고, 마크업에서 모든 참조를 제거한 후, 결과적으로 파일이 삭제되기를 기다리는 것입니다:

  • Settings > Files > clean orphan uploads grace period hours

또한 이 특정 매개변수를 0으로 설정하는 것도 시도해 보았지만, 작동하지 않는 것 같습니다. 이 경우, 툴팁을 다음과 같이 수정하는 것이 더 좋을 것입니다: “유예 기간을 비활성화하려면 0으로 설정하십시오”. 또는 상황에 맞게: “즉시 효과를 적용하려면 0으로 설정하십시오”.

이러한 유지보수 작업이 얼마나 자주 실행되는지 알 수 없습니다. 시간 단위로 실행되는 것이라고 가정하고 있었지만, 하루에 한 번인 걸까요? 이 정보도 알면 유용할 것 같습니다.

이 파일 이름 변경 과정을 더 빠르게 수행하는 방법에 대한 도움을 주시면 감사하겠습니다! 우회 방법은 있지만, 다소 번거롭고 느립니다.

매시간…

루비를 잘 알지는 못하지만, 그 부분도 0이 1을 의미하는 것처럼 보입니다. 아마 매개변수 tip에도 “0 값은 1로 해석됩니다.” 또는 이와 유사한 문구를 추가하는 것이 좋을 것 같습니다. 특히 다른 맥락에서 0은 비활성화를 의미하는 특수한 값을 가지는 경우가 많기 때문입니다. @neounix 감사합니다.

자가 호스팅을 사용 중이라면, Rails 콘솔에서 업로드 기록을 업데이트하는 것이 가장 좋을 것 같습니다. API로 이를 수행할 수 있는 방법은 없을 것 같지만, 자세히 확인해 보지는 않았습니다.

저희는 셀프호스팅을 사용하고 있습니다. 셸 계정 접근 권한을 제공받았지만, 아직 후속 조치는 취하지 않았습니다. 힌트 감사합니다.

잠깐. 정확히 무엇을 하려는 건지 잘 모르겠네요. 업로드된 게시물에서 사람들이 보는 이름을 변경하려는 건가요? 만약 그렇다면, 아래와 같은 작업을 원할 수도 있습니다.

rake posts:remap["old-name.pdf","newname.pdf"]

모든 게시물에서 문자열 교체 문서에 설명되어 있듯이요. 당신의 목적을 위해서는 Upload 모델의 원래 파일명이 실제로는 중요하지 않을 것 같습니다.

하지만 아래 코드를 사용하여 변경할 수도 있습니다.

u=Upload.find_by(original_filename: 'mypretty-w9.pdf')
u.original_filename='better-name.pdf'
u.save

이 업로드가 포함된 게시물을 다시 생성(rebake)해 봤지만 아무런 변화가 없었습니다.

수정:

def rename_upload(old_name, new_name)
  u=Upload.find_by(original_filename: old_name)
  u.original_filename=new_name
  u.save
end

이것을 붙여넣으면,

rename_upload('name.pdf','better-name.pdf')

처럼 호출할 수 있습니다.

이렇게 하면 다운로드 시 더 나은 파일명이 사용되도록 수정됩니다.

학자로서 살았던 전직 시절, 저는 다른 누구와도 다른 제만의 특별한 PDF 파일 명명 규칙이 있었습니다. 제 아내도 아마 자기만의 규칙이 있을 거라고 확신합니다. 제 추측으로는, 파일명을 “올바르게” 맞춰도 아무도 당신의 파일명을 좋아하지 않을 것입니다. :wink:

제가 하려던 건 그게 아니었어요. leadauthor 문자열은 파일 이름의 일부일 뿐이었거든요. 하지만 파일 이름을 수정했을 때(스페인 학계의 가족 이름 명명 규칙에 대한 제 이해가 매우 제한적이기 때문이었죠) 이름이 바뀐 파일을 업로드하려고 했더니, Discourse가 매니페스트에 동일한 파일이 있음을 감지하고 원래 대상과 파일 이름으로 교체해 버렸어요. 이게 일종의 기능이라고 볼 수도 있겠죠? :roll_eyes: 사이트 데이터베이스에서 해당 파일을 완전히 제거한 후에야 수정된 파일 이름의 파일을 업로드할 수 있었습니다. @pfaffman 님의 도움과 관심에 진심으로 감사드립니다.

"파일명"은 어디에서 확인하나요? 파일 시스템의 실제 파일명은 무작위 문자열입니다.

저의 인스턴스에서 테스트해 본 결과, [filename.pdf|attachment](upload://filehash.pdf)의 파일 이름을 변경하면 게시글에는 filename.pdf로 표시되지만, 다운로드 시에는 여전히 원래 파일 이름으로 저장됩니다. 아마도 그가 원하는 것도 같은 것 같습니다. 다운로드할 때 사용되는 파일 이름을 변경하는 것 말이죠.

크게 중요한 문제는 아니지만, 업로드된 파일의 이름도 변경할 수 있으면 좋겠습니다.

아, 그래요. 그러면 이 세 줄의 Rails 코드가 원하는 대로 동작하는 거군요. 게시글에서 보이는 것은 바뀌지 않지만, 파일을 클릭하면 "better-name.pdf"라는 이름으로 저장됩니다.

답변해 주신 모든 분들께 감사드립니다.