PDF 파일을 다운로드할 수 없습니다

팀 여러분께,

저는 파일을 저장하기 위해 서버 로컬 저장소를 사용하고 있습니다. PDF 파일을 업로드했는데 서버에 성공적으로 업로드되었고, 실제로도 서버에 존재합니다(ssh 로그인을 통해 직접 확인했습니다).

Screenshot from 2019-12-24 14-44-42

위 스크린샷은 PDF 파일을 다운로드하려고 할 때 발생하는 오류입니다.

다운로드 이벤트 로그입니다

[discourse_cloud] Started GET "/uploads/short-url/ev4yCeBAtz19YgsTSEkhLMkKrFK.pdf" for 122.168.93.128 at 2019-12-24 09:16:40 +0000
[discourse_cloud] Processing by UploadsController#show_short as PDF
[discourse_cloud]   Parameters: {"base62"=>"ev4yCeBAtz19YgsTSEkhLMkKrFK", "extension"=>"pdf"}
[discourse_cloud] Sent file /home/deploy/discourse_cloud/releases/20191220210316/public/uploads/discourse_cloud/original/1X/65a1a66f4bddc09fbdab830a8c74c7fbe05cca98.pdf (0.2ms)
[discourse_cloud] Completed 200 OK in 11ms (ActiveRecord: 0.0ms)
[discourse_cloud] Started GET "/home/deploy/discourse_cloud/releases/20191220210316/public/uploads/discourse_cloud/original/1X/65a1a66f4bddc09fbdab830a8c74c7fbe05cca98.pdf" for 122.168.93.128 at 2019-12-24 09:16:40 +0000
[discourse_cloud] ActionController::RoutingError (No route matches [GET] "/home/deploy/discourse_cloud/releases/20191220210316/public/uploads/discourse_cloud/original/1X/65a1a66f4bddc09fbdab830a8c74c7fbe05cca98.pdf")
/home/deploy/discourse_cloud/shared/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/debug_exceptions.rb:65:in `call'
[discourse_cloud]   Rendering exceptions/not_found.html.erb within layouts/no_ember
[discourse_cloud]   Rendered exceptions/not_found.html.erb within layouts/no_ember (0.6ms)
[discourse_cloud]   Rendered layouts/_head.html.erb (1.0ms)
[discourse_cloud]   Rendered common/_discourse_stylesheet.html.erb (0.6ms)
[discourse_cloud]   Rendered application/_header.html.erb (0.1ms)
[discourse_cloud]   Rendering html template
[discourse_cloud]   Rendered html template (0.0ms)

어떤 오류일 수 있을까요? :-/

Discourse를 통해 파일을 업로드하지 않았다면 컨테이너 내부의 nginx 구성을 변경해야 합니다. nginx는 임의의 디렉터리에서 임의의 파일을 서빙하도록 설정되어 있지 않기 때문입니다.

스크린샷은 discourse를 통해 업로드된 것처럼 보이지만, URL 경로는 실제 경로가 아니라 정리된 짧은 URL처럼 보이네요?

그 PDF를 try.discourse.org에 업로드해서 거기서 작동하는지 확인해 볼 수 있을까요? 혹시 그 특정 파일에 문제가 있는 건 아닌가요?

다른 유형의 파일은 업로드가 잘 되는 것 같네요?

음, 저는 파일을 아무 문제 없이 업로드할 수는 있지만, 이제 파일을 다운로드할 수 있게 되었습니다.

Discourse 메시지 상자를 사용하여 파일을 업로드했고 업로드에는 성공했지만, 파일을 다운로드할 수 없습니다.

네 @Stephen, 제 discourse를 사용하면 파일을 부드럽게 업로드할 수 있지만, 다운로드를 허용하지 않습니다. :frowning:

이 스크린샷을 확인해 주세요. 다운로드 버튼이 있습니다. 클릭을 시도했지만 다운로드할 수 없습니다.

다운로드 버튼을 사용하여 이미지를 다운로드하려고 할 때 발생하는 오류입니다. (다운로드 버튼은 아마도 send_data ruby 함수를 사용하는 것 같습니다)

이것이 NGINX 문제인지, 아니면 다른 디렉터리 권한 관련 문제인지 이해하고 싶습니다.

감사합니다

같은 문제를 겪었습니다. PDF 파일은 업로드되지만, 파일을 다운로드하려고 하면 “이 페이지는 존재하지 않습니다” 페이지로 이동합니다!

메타에서 직접 테스트해 보았는데, PDF 파일을 쉽게 업로드하고 다운로드할 수 있었습니다.

업데이트: 몇 가지 변경 사항을 시도해 본 결과, 영어가 아닌 다른 언어와 관련된 Contribute > Bug 문제로 보입니다.

PDF 파일을 영문 파일명으로 다시 생성해야 했습니다(이전에는 파일명에 페르시아 문자가 포함되어 있었습니다). 이후에는 업로드된 파일을 문제 없이 다운로드할 수 있었습니다.

또한, 페르시아 문자가 포함된 파일명의 PDF도 메타에서는 쉽게 업로드하고 다운로드할 수 있었습니다. 따라서 관리자 패널의 인코딩 옵션과 관련이 있을 것으로 추정됩니다.

팀 여러분께,

답변이 많이 늦었습니다. 하지만 nginx.conf 파일 내에서 변경을 가하여 문제를 해결했습니다. 매우 간단한 수정이었고, nginx.conf와 관련된 문제였습니다. (그리고 저는 코어 코드를 수정하려고 시도하고 있었습니다 :smiley: )

nginx.conf에서 이 줄을 삭제했습니다.

 proxy_set_header X-Sendfile-Type X-Accel-Redirect;

이것이 다운로드를 작동하게 한 수정 사항이었습니다 :slight_smile:

앞으로 더 자주 활동하겠습니다 :slight_smile:

감사합니다,
Ashish P.