복붙노트

[SPRING] Grails 파일 다운로드

SPRING

Grails 파일 다운로드

나는 사용자가 원하는 파일 형식을 업로드 할 수있는 사이트를 크레이 팅하려고 노력 중이다. 이 기능을 잘 구현했으며 파일은 서버에 보관됩니다. 나중에 볼 수있는 파일을 다운로드 할 수 있지만 제대로 작동시키지 못합니다. 내가 사용할 수있는 예제를 사용했지만 텍스트 파일을 예제로 사용하는 경향이 있습니다. 내 문제는 PDF 파일과 다른 많은 파일 형식이 제대로 다운로드되지 않는다는 것입니다. 그들은 잘 다운로드하는 것, 그러나 파일의 아무도 성공적으로 열리지 않습니다. 파일을 비교해 보면 대부분의 파일 내용이 정확하다고하지만 특정 부분은 맞지 않습니다. 여기 그루비 코드가있다.

def file = new File(params.fileDir)    
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "filename=${file.getName()}")
response.outputStream << file.text
return

이 코드는 다운로드 링크에 의해 호출되는 컨트롤러 안에 있습니다. 다른 contentType을 가지고 놀아 보았습니다. 유형은 있지만 어떤 유형을 사용할 수 있는지 모르겠습니다. 하나입니까? 내가 시도하는 모든 것은 문제를 해결하지 못합니다.

당신의 도움을 주셔서 감사합니다.

해결법

  1. ==============================

    1.문제는 "file.text"를 사용하여 파일의 내용을 문자열로 읽는 것입니다. 파일 내용은 텍스트가 아닌 바이너리 (예 : PDF 파일이 바이너리) 인 경우에도 시스템 문자 인코딩을 사용하여 변환되어 응답 인코딩을 사용하여 클라이언트로 전송되어 바이너리 컨텐츠를 수정합니다. 차라리 다음과 같은 다른 접근 방식을 사용해야합니다.

    문제는 "file.text"를 사용하여 파일의 내용을 문자열로 읽는 것입니다. 파일 내용은 텍스트가 아닌 바이너리 (예 : PDF 파일이 바이너리) 인 경우에도 시스템 문자 인코딩을 사용하여 변환되어 응답 인코딩을 사용하여 클라이언트로 전송되어 바이너리 컨텐츠를 수정합니다. 차라리 다음과 같은 다른 접근 방식을 사용해야합니다.

    def file = new File(params.fileDir)    
    response.setContentType("application/octet-stream")
    response.setHeader("Content-disposition", "attachment;filename=${file.getName()}")
    
    response.outputStream << file.newInputStream() // Performing a binary stream copy
    
  2. from https://stackoverflow.com/questions/396677/grails-file-download by cc-by-sa and MIT license