유료 다운로드로 webapp를 만들고 있습니다. protecting uploads에 대한 Carrierwave 가이드를 따랐습니다. 모든 것이 한 가지를 구하는 것으로 예상하고 있습니다.레일을 표시 전체 경로를 노출시키지 않고 Carrierwave URL
ProductsController가제품 파일 업 로더
...
def store_dir
"#{Rails.root}/downloads/#{model.product_id}/#{model.id}"
end
...
경로
get "/downloads/:product_id/:product_file_id/:filename", :controller => "products", action: "download", conditions: {method: :get}
: 여기 내 현재 설정입니다
문제가 다운로드 경로입니다. 파일 업 로더에서 #{Rails.root}
을 지정했기 때문에 파일은 downloads
이라는 공용 폴더 외부 폴더에 저장됩니다. 그러나 의도하지 않은 부작용이 있습니다. 모델에서 URL을 검색 할 때 레일스 루트와 관련된 경로가 아닌 전체 절대 경로를 얻습니다.
예를 들어, ProductFile.first.file.url
은 "/home/doomy/Documents/resamplr/downloads/3/1/aaaa.zip"
을 반환하며 대신 /downloads/3/1/aaa.zip
을 반환해야합니다.
이 동작은 ProductFileUploader
에 지정된 내용에 첨부 된 것 같습니다.
예를 들어 store_dir
을 "/downloads/#{model.product_id}/#{model.id}"
으로 변경하면 내 PC의 루트에 업로드하려고하기 때문에 액세스 오류가 발생합니다. "downloads/#{model.product_id}/#{model.id}"
은 단순히 다운로드라고하는 public
디렉토리의 새 폴더에 업로드합니다. 원하는 작업이 아닙니다.
진행 방법에 대한 조언이 있으십니까? 감사.
편집 :
나는 Rails.root
에 Carrierwave 설정 파일에 config.root
을 설정하면이 동작을 허용 것으로 나타났습니다. 이 경우 내 ProductFileUploader
에서 store_dir
을 "downloads/#{model.product_id}/#{model.id}
으로 지정할 수 있습니다.
그러나 공용 파일은 "/ public/..."링크와 함께 저장된다는 의미입니다. Rails는 공용 폴더 이름을 자동으로 삭제하고 URL에 하위 디렉토리 이름을 사용합니다.