문제

우리는 최근 사이트에서 Amazon S3를 구현하여 이미지를 처리하는 방식을 변경하게했습니다. 우리는 디스크에서 파일을 읽고, 일부 통계를 녹음하고, 헤더를 설정하고, 파일의 내용을 이미지 /jpeg로 반환하는 컨트롤러 /fotos.php를 호출했습니다.

모두 S3까지 정상화되었습니다. Fotos.php는 이제 아마존의 리소스로 302 리디렉션을 수행하고 모두가 훌륭하고 작동하지만 파일 유형을 .htm으로 설정하기 때문에 Firefox에서 이미지를 저장할 수는 없습니다. 나는이 문제에 대한이 논의를 발견했고, 그것은 Firefox의 버그처럼 보인다 :

https://bugs.launchpad.net/ubuntu/+source/firefox-3.0/+bug/207670

다음은 문제를 보여주는 URL입니다 (큰 이미지를 저장하려고합니다).

http://www.viajeros.com/fotos/el-gran-nago-de-atitlan-y-sus-volcanes/132968

Internet Explorer 6은 적어도 그것을 제목없는 것으로 저장하려고 시도합니다 .BMP.

다음은 fotos.php에서 사용하는 코드 스 니펫입니다.

$archivo = $fotos->ObtenerPathFotoAmazon( $url, null );

if (empty($_GET['nocache'])) {
    header('HTTP/1.0 302 Found');
    header("Expires: ".gmdate("D, d M Y H:i:s", time()+315360000)." GMT");
    header("Cache-Control: max-age=315360000");
} else {
    header('HTTP/1.0 307 Temporary Redirect');
}

header('Location: ' . AWS_BUCKET_URL . $archivo);
die;

이것에 대한 해결 방법을 알고 있습니까?

편집 : Cloudfront도 사용하고 있습니다.

도움이 되었습니까?

해결책

이미지의 내용 유형을header('Content-Type: image/jpeg'); 또는header('Content-Type: image/png');

아마도 PHP가 컨텐츠 유형을 지정하도록 컨텐츠 배치 첨부 파일을 사용해야 할 수도 있습니다 (위치를 웹 서버로 맡기십시오).

$archivo = $fotos->ObtenerPathFotoAmazon( $url, null );

if (empty($_GET['nocache'])) {
   header('HTTP/1.0 302 Found');
   header("Expires: ".gmdate("D, d M Y H:i:s", time()+315360000)." GMT");
   header("Cache-Control: max-age=315360000");
} 

header('Content-Type: image/jpeg');
header("Content-Disposition: attachment; filename='$archivo'");
readfile(AWS_BUCKET_URL .$archivo);
die();

다른 팁

버그가 아닙니다

S3 자체는 저장 한 객체가 무엇인지 모릅니다. 때를 놓다 S3의 객체도 포함해야합니다 컨텐츠 타입 그리고 내용화 헤더 (그리고 당신이 원하는 다른 것). 그렇게하면 S3은 귀하 또는 다른 사람이있을 때 해당 헤더 값으로 응답합니다. 가져 오기대상입니다

이 버그는 Firefox로 제한되지 않기 때문에 (즉, 최소한 이미지라는 것을 인식하고 있지만 잘못된 유형으로 저장하려고합니다) S3가 파일의 잘못된 마임 유형을 반환하고 있다고 생각합니다.

사람들이 다른 포럼에서 이것을 물을 때 나는 그들을 다음의 방향으로 지적합니다. 이 스크립트. 당신은 그것을 모두 사용할 필요는 없지만 올바른 방향으로 멋진 포인터입니다.

나는 다른 사람들이 이것을 충분히 잘 대답했기 때문에 더 많이 쓰지 않을 것입니다.

나는이 문제를 한 번 스스로 달렸다. 당시 (당시)에 대한 유일한 실제 해결 방법은 URL의 끝에 "#.jpg"와 같은 것을 추가하는 것이라고 생각합니다. 이는 처리에 영향을 미치지 않아야하며 FF가 다운로드 유형을 JPG로 설정하도록 강요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top