답변:
브라우저에 파일을 보도록 브라우저에 알리려면 HTTP 응답에 다음 헤더가 포함되어야합니다.
Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"
보지 않고 파일을 다운로드 하려면 :
Content-Type: application/pdf
Content-Disposition: attachment; filename="filename.pdf"
파일 이름에 특수 문자가 포함 된 경우 파일 이름을 따옴표로 묶어야합니다 filename[1].pdf
.
HTTP 응답 헤더를 설정하는 방법은 HTTP 서버에 따라 다릅니다 (또는 서버 측 코드에서 서버 응답 : 서버 측 프로그래밍 언어).
HTML5를 사용하고 있다면 (현재는 모든 사람들이 사용한다고 생각합니다)라는 속성이 download
있습니다.
예를 들어
<a href="somepathto.pdf" download="filename">
다음은 filename
선택 사항이지만, 제공하는 경우, 다운로드 한 파일이 이름을 소요됩니다.
올바른 유형은 application/pdf
PDF가 아닌 PDF에 대한 것 application/force-download
입니다. 이것은 일부 레거시 브라우저의 해킹처럼 보입니다. 가능하면 항상 올바른 MIME 유형을 사용하십시오.
서버 코드를 제어 할 수있는 경우 :
header("Content-Disposition", "attachment; filename=myfilename.myextension");
header("Content-Disposition", "inline; filename=myfilename.myextension");
서버 코드를 제어 할 수 없습니다 :
참고 : 자세한 정보가 있고 공통 코드를 사용할 수 있으므로 서버 측에서 파일 이름을 설정하는 것이 좋습니다.
아파치가 있다면 이것을 .htaccess
파일에 추가 하십시오 :
<FilesMatch "\.(?i:pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
이전 게시물에 입력 오류가있었습니다.
header("Content-Type: application/force-download");
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=\"".$name."\";");
브라우저에서 사용자에게 프롬프트를 표시하지 않으려면 "첨부 파일"대신 세 번째 문자열에 "인라인"을 사용하십시오. 인라인은 매우 잘 작동합니다. 사용자에게 열기를 클릭하도록 요청하지 않고 PDF가 즉시 표시됩니다. "첨부 파일"을 사용했는데 사용자에게 열기, 저장을 요청하는 메시지가 표시됩니다. 브라우저 설정 너트를 변경하려고했지만 프롬프트가 표시되지 않습니다.
이것은 ASP.NET MVC 용입니다.
cshtml 페이지에서 :
<section>
<h4><a href="@Url.Action("Download", "Document", new { id = @Model.GUID })"><i class="fa fa-download"></i> @Model.Name</a></h4>
<object data="@Url.Action("View", "Document", new { id = @Model.GUID })" type="application/pdf" width="100%" height="800" class="col-md-12">
<h2>Your browser does not support viewing PDFs, click on the link above to download the document.</h2>
</object>
</section>
컨트롤러에서 :
public ActionResult Download(Guid id)
{
if (id == Guid.Empty)
return null;
var model = GetModel(id);
return File(model.FilePath, "application/pdf", model.FileName);
}
public FileStreamResult View(Guid id)
{
if (id == Guid.Empty)
return null;
var model = GetModel(id);
FileStream fs = new FileStream(model.FilePath, FileMode.Open, FileAccess.Read);
return File(fs, "application/pdf");
}
다음은 firefox에서 잘 작동하지만 크롬 및 모바일 브라우저에서는 작동하지 않습니다.
Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"
크롬 및 모바일 브라우저 오류를 해결하려면 다음을 수행하십시오.
Google PDF 뷰어는 다음과 같이 사용할 수 있습니다.
<iframe src="http://docs.google.com/gview?url=http://example.com/path/to/my/directory/pdffile.pdf&embedded=true" frameborder="0"></iframe>
루트 파일에서 downloads.php를 엽니 다.
그런 다음 186 행으로 이동하여 다음으로 변경하십시오.
if(preg_match("/\.jpg|\.gif|\.png|\.jpeg/i", $name)){
$mime = getimagesize($download_location);
if(!empty($mime)) {
header("Content-Type: {$mime['mime']}");
}
}
elseif(preg_match("/\.pdf/i", $name)){
header("Content-Type: application/force-download");
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=\"".$name."\";");
}
else{
header("Content-Type: application/force-download");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$name."\";");
}
다음과 같은 방법으로이를 수행 할 수 있습니다.
<a href="path to PDF file">Open PDF</a>
PDF 파일이 일부 폴더 안에 있고 해당 폴더에 해당 폴더의 파일에 직접 액세스 할 수있는 권한이없는 경우 다음과 .htaccess
같은 방법으로 파일 설정을 사용하여 일부 파일 액세스 제한을 우회해야합니다 .
<FilesMatch ".*\.(jpe?g|JPE?G|gif|GIF|png|PNG|swf|SWF|pdf|PDF)$" >
Order Allow,Deny
Allow from all
</FilesMatch>
그러나 이제 필요한 특정 파일 만 허용 하십시오.
이 코드를 사용했으며 완벽하게 작동했습니다.
어느 쪽이든 사용
<embed src="file.pdf" />
포함이 옵션 또는 새 플러그인 인 경우 PIFF : https://github.com/terrasoftlabs/piff
다음은 PHP에서 브라우저에서 파일을 보도록하는 또 다른 방법입니다.
$extension = pathinfo($file_name, PATHINFO_EXTENSION);
$url = 'uploads/'.$file_name;
echo '<html>'
.header('Content-Type: application/'.$extension).'<br>'
.header('Content-Disposition: inline; filename="'.$file_name.'"').'<br>'
.'<body>'
.'<object style="overflow: hidden; height: 100%;
width: 100%; position: absolute;" height="100%" width="100%" data="'.$url.'" type="application/'.$extension.'">
<embed src="'.$url.'" type="application/'.$extension.'" />
</object>'
.'</body>'
. '</html>';
header
요청 본문 출력을 시작한 후에는 작동하지 않습니다 (그리고 HTML 문서에서 연결하기위한 문자열을 반환하지 않습니다)
Adobe Reader, 메뉴 → 편집 → 환경 설정 → 인터넷 을 연 다음 브라우저 모드로 변경하거나 다른 브라우저에서 자세한 지침을 보려면 브라우저에서 PDF 표시 | Acrobat, Acrobat Reader .
.PDF에 링크하면 브라우저에서 열립니다.
확인란이 선택되어 있지 않으면 .zip으로 연결되어 강제로 다운로드됩니다.
.zip이 옵션이 아닌 경우 PHP에서 헤더 를 사용 하여 강제로 다운로드
header('Content-Type: application/force-download');
header('Content-Description: File Transfer');