Como faço para corrigir o Firefox tentando “Salvar imagem como” .htm?
-
23-08-2019 - |
Pergunta
Temos recentemente implementado Amazon S3 em nosso site que nos levou a mudar a forma como lidamos com as imagens. Nós costumávamos chamar um /fotos.php controlador que iria ler o arquivo do disco, gravar algumas estatísticas, cabeçalhos definir e retornar o conteúdo do arquivo como image / jpeg.
Tudo correu bem até S3. Fotos.php agora faz um redirecionamento 302 para o recurso no Amazon e todos é agradável e de trabalho, mas você não pode salvar uma imagem no Firefox porque ele define seu tipo de arquivo como .htm. Eu encontrei esta discussão sobre o assunto, e parece que um bug no Firefox:
https://bugs.launchpad.net/ubuntu /+source/firefox-3.0/+bug/207670
Aqui está uma URL com o problema (tentar salvar a imagem grande):
http: // www .viajeros.com / fotos / el-gran-lago-de-atitlan-y-sus-volcanes / 132968
Internet Explorer 6, pelo menos, tenta salvá-lo como Untitled.BMP.
Aqui está o trecho de código que usamos em 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;
Você conhece uma solução para isso?
EDIT:. Estamos usando CloudFront bem
Solução
tentar especificar o tipo de conteúdo da imagem com
header('Content-Type: image/jpeg');
ou
header('Content-Type: image/png');
talvez você terá que usar anexo disposição do conteúdo para deixar PHP especificar o tipo de conteúdo (local de deixar a tarefa para o servidor web)
$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();
Outras dicas
Não é um bug
si S3 não sabe o que mimeType o objeto que você armazene é. Quando você PUT o objeto no S3 é preciso também incluem Content-Type e Content-Disposition headers (eo que mais você pode querer). Quando você faz isso, S3 irá responder com esses valores de cabeçalho quando você, ou qualquer outra pessoa, get é o objeto
Uma vez que este bug não se restringe ao Firefox (IE também está tentando salvá-lo como o tipo errado, embora, pelo menos, percebe que é uma imagem), eu acho que S3 está retornando o tipo MIME errado para o arquivo.
Quando as pessoas perguntam isso em outros fóruns que eu apontá-los na direção do este script . Você não tem que usar tudo isso, mas é um ponteiro agradável na direção certa.
Eu não vou escrever mais como os outros responderam a esta bastante bem.
Eu corri para este problema me uma vez. Eu acho que a única solução real para ele (na época) era para acrescentar algo como "# .jpg" ao final da URL. Isso não deve afetar seu processamento e forçará FF para definir o tipo de download para jpg.