Ao acessar um objeto do OSS pelo navegador, ele pode ser baixado em vez de visualizado diretamente. Use este guia para diagnosticar a causa e configure o comportamento correto de visualização.
Solução de problemas
Se um objeto for baixado em vez de visualizado, execute o curl para inspecionar os cabeçalhos de resposta e identificar a causa.
Objetivo: Verificar se o cabeçalho de resposta contém campos que forçam o download.
Etapas: Execute o comando abaixo no terminal. Substitua <your-object-url> pela URL do seu objeto.
curl -I "<your object URL>"
Análise do resultado: Verifique na resposta a presença dos campos x-oss-force-download e Content-Disposition.
Caso o cabeçalho de resposta contenha
x-oss-force-download: true: Uma política de segurança do nome de domínio padrão do OSS foi acionada. Para a solução, consulte Cenário 1: Download forçado devido a uma política de segurança do OSS.Se o cabeçalho de resposta não contiver
x-oss-force-downloadmas apresentarContent-Disposition: attachment: Os metadados do objeto estão configurados para baixá-lo como anexo. Para a solução, consulte Cenário 2: Download forçado devido às configurações de metadados do objeto.Quando nenhum dos campos acima estiver presente no cabeçalho, mas o download ainda ocorrer: Provavelmente o navegador não reconhece o tipo de arquivo do objeto. Para a solução, consulte Cenário 3: O navegador não consegue visualizar o objeto devido a um Content-Type incorreto.
Soluções
Cenário 1: Download forçado devido a uma política de segurança do OSS
Este cenário ocorre quando o cabeçalho de resposta contém x-oss-force-download: true.
-
Causa: O OSS adiciona os cabeçalhos
x-oss-force-download: trueeContent-Disposition: attachmentpara impedir que certos tipos de arquivo (como HTML) sejam executados nos navegadores. Essa política se aplica ao acessar objetos por meio de um nome de domínio padrão do OSS ou de um endpoint de aceleração em buckets criados após uma data específica.Para obter mais informações sobre as políticas, consulte Apêndice: Referência rápida para regras de download forçado do OSS ao final deste tópico.
Solução: Use um nome de domínio personalizado para acessar recursos do OSS
-
Procedimento:
Mapeie um domínio personalizado: Faça login no console do OSS. Na página Domain Names do bucket, mapeie seu nome de domínio personalizado que possua registro ICP.
Configure um registro CNAME: No provedor do seu domínio, como o Alibaba Cloud DNS, adicione um registro CNAME que aponte seu nome de domínio personalizado para o endereço CNAME fornecido pelo OSS.
Acesse o objeto com o novo domínio: Acesse o objeto pela URL do seu domínio personalizado. O objeto agora será visualizado diretamente.
Para aceleração global, mapeie seu domínio personalizado para um endpoint de aceleração. Isso ignora a política de download forçado e fornece acesso acelerado.
Para instruções detalhadas, consulte Acessar o OSS por um nome de domínio personalizado.
Cenário 2: Download forçado devido às configurações de metadados do objeto
Esse caso acontece quando o cabeçalho de resposta contém Content-Disposition: attachment, mas não apresenta x-oss-force-download.
Causa: O metadado
Content-Dispositiondo objeto está definido comoattachment, o que força o navegador a baixar o arquivo em vez de exibi-lo. Se essa configuração não for removida após uso temporário, todas as solicitações subsequentes acionarão um download.-
Solução: Altere o metadado Content-Disposition do objeto para inline
-
Modificação via console
Faça login no OSS console e acesse a página Objects na seção Object Management do bucket de destino.
Localize o objeto desejado. Clique em ┇ na coluna Actions e selecione Set Object Metadata.
Na caixa de diálogo exibida, localize o campo Content-Disposition e altere seu valor para
inline.Clique em OK para salve as configurações.
-
Modificação em lote usando ossutil
# Set the Content-Disposition of a specific object to inline. ossutil set-props oss://your-bucket/your-object.pdf --content-disposition inline --metadata-directive update
-
Cenário 3: O navegador não consegue visualizar o objeto devido a um Content-Type incorreto
Esta situação ocorre quando o cabeçalho de resposta está normal, mas o navegador ainda assim baixa o objeto.
Causa: O
Content-Type(tipo MIME) do objeto está ausente ou incorreto. Por exemplo, uma imagem JPG comContent-Typedefinido comoapplication/octet-streamserá baixada porque o navegador não consegue identificar o tipo de arquivo.-
Solução: Defina o Content-Type correto para o objeto
-
Modificação via console
Faça login no OSS console e acesse a página Objects na seção Object Management do bucket de destino.
Localize o objeto desejado. Clique em ┇ na coluna Actions e selecione Set Object Metadata.
Na caixa de diálogo exibida, localize o campo Content-Type e altere-o para o valor correto.
Clique em OK para salve as configurações.
Exemplos de Content-Type correto para tipos comuns de arquivo:
Imagens:
image/jpeg,image/png,image/gif,image/webpVídeos:
video/mp4Documentos PDF:
application/pdfArquivos HTML:
text/htmlTexto simples:
text/plain
-
Modificação em lote usando ossutil
# Set the Content-Type of a specific object to image/jpeg. ossutil set-props oss://your-bucket/your-object.jpg --content-type image/jpeg --metadata-directive update -
Modificação usando o SDK CopyObject**
Ao usar CopyObject para copiar um objeto, a diretiva de metadados
COPYé utilizada por padrão. Essa diretiva copia os metadados do objeto de source para o objeto de destino exatamente como estão e não infere nem atualize automaticamente oContent-Typecom base na extensão do nome do arquivo de destino. Nesse caso, se você especifique apenas oContent-Typena solicitação sem defina ox-oss-metadata-directivecomoREPLACE, a configuração não terá efeito e o objeto de destino manterá oContent-Typedo objeto de source.Valores válidos para
x-oss-metadata-directive:COPY(padrão): copia os metadados do objeto de source e ignora metadados comoContent-Typeespecificados na solicitação.REPLACE: substitui os metadados do objeto de source pelos metadados especificados na solicitação.
Ao chamar
CopyObject, especifique tanto oContent-Typequanto ox-oss-metadata-directive: REPLACEpara atualize oContent-Typedo objeto de destino para o valor especificado. O código de exemplo a seguir utiliza o SDK para Python:import oss2 # Initialize the bucket. auth = oss2.Auth('<your-access-key-id>', '<your-access-key-secret>') bucket = oss2.Bucket(auth, '<your-endpoint>', '<your-bucket-name>') # Set Content-Type and set the metadata directive to REPLACE when you copy an object. headers = { "Content-Type": "image/jpeg", "x-oss-metadata-directive": "REPLACE" } bucket.copy_object('<source-bucket-name>', 'source-object.png', 'target-object.jpg', headers=headers)Alternativamente, use o método
update_object_metapara atualize diretamente oContent-Typede um objeto existente ou especifique oContent-Typeao fazer upload de um objeto usandoput_object.
-
Cenário 4: Falha na visualização porque uma política de bucket impõe HTTPS
Esse cenário ocorre quando uma solicitação via HTTP retorna o erro 403 AccessDenied com a mensagem Access denied by bucket policy.. O objeto não é visualizado nem baixado, sendo retornado normalmente apenas quando solicitado via HTTPS.
Causa: A política do bucket contém a condição
acs:SecureTransport, que nega solicitações não enviadas via HTTPS. Uma solicitação HTTP para a URL do objeto é rejeitada pela política do bucket antes que o objeto seja retornado, impedindo a visualização no navegador. Solicitações que usam um nome de domínio personalizado estão sujeitas à mesma política de bucket que as solicitações feitas pelo nome de domínio padrão do OSS.-
Confirme a causa:
Faça login no OSS console. Clique em bucket de destino. No painel de navegação à esquerda, clique em
Verifique se a lista de políticas contém alguma política cuja Condition limite o método de acesso a HTTP e cujo Effect seja Deny.
-
Como alternativa, consulte a política do bucket pela linha de comando:
aliyun ossutil api get-bucket-policy --bucket <bucket-name>
Solução 1 (Recomendada): Acesse o objeto via HTTPS. Substitua
http://porhttps://na URL do objeto e solicite-o novamente. Assim, o objeto será visualizado no navegador e o bucket continuará a negar solicitações HTTP.Solução 2: Modifique a política do bucket. Se o seu negócio exigir acesso HTTP, no painel de navegação à esquerda, clique em e remova ou modifique a política que contém a condição
acs:SecureTransport. Permitir solicitações HTTP significa que os dados serão transmitidos em texto simples, o que reduz a segurança da transmissão. Avalie o impacto antes de alterar a política.
Casos de uso adicionais e soluções
Alterações nos metadados não surtem efeito: Verifique o cache da CDN
Se você utilizar a CDN para acelerar o acesso ao OSS, alterações de metadados como Content-Type ou Content-Disposition podem não ter efeito imediato porque os nós da CDN ainda servem a versão em cache.
Solução: Limpe o cache da CDN para a URL do arquivo modificado no console da CDN. Atualizar e pré-carregar recursos.
Como forçar o download de um objeto em vez de visualizá-lo?
Para sempre forçar o download quando usuários acessarem um arquivo, utilize um dos métodos a seguir.
Método 1 (Recomendado): Configure no OSS. Defina o metadado
Content-Dispositiondo arquivo comoattachment, conforme descrito em Cenário 2. Ideal para configurações permanentes e individuais por arquivo.Método 2: Configure na CDN. Adicione
Content-Disposition: attachmentcomo cabeçalho de resposta de saída em Cache no console da CDN. Isso evita a modificação do arquivo de source e permite configuração em lote por caminho ou tipo de arquivo.
O navegador não suporta o formato de arquivo para visualização
Navegadores não conseguem visualizar certos formatos profissionais, como .psd, .ai e .sketch. Esses arquivos são baixados independentemente das configurações do OSS e da CDN.
Solução: Instale uma extensão de navegador compatível com o formato ou utilize um service de visualização de documentos, como Visualização online do WebOffice.
Apêndice: Referência rápida para regras de download forçado do OSS
Verifique o valor de x-oss-ec no cabeçalho de resposta e use as tabelas a seguir para identificar a regra correspondente.
Código de erro (x-oss-ec): Identifica a regra que acionou o download.
Data de criação do bucket: A política geralmente se aplica apenas a buckets criados após esta data. Buckets legados normalmente não são afetados.
Data de ativação da aceleração de transferência: A política costuma valer apenas para buckets com aceleração de transferência ativada após esta data. Buckets com aceleração ativada anteriormente geralmente não são impactados.
É possível ignorar todas as regras de download forçado utilizando um nome de domínio personalizado.
Nomes de domínio padrão do OSS
Quando a política entra em vigor | Região | Recursos afetados | Tipos de arquivo afetados | Código de erro |
08:00, 28 de setembro de 2018 | China (Hangzhou), China (Shanghai), China (Qingdao), China (Beijing), China (Zhangjiakou), China (Hohhot), China (Shenzhen), China (Chengdu) | Buckets criados após a entrada em vigor da política | text/html | |
12:00, 25 de setembro de 2019 | China (Nanjing - Local Region - Phasing Out) China (Ulanqab), China (Heyuan), China (Guangzhou), US (Silicon Valley), US (Virginia), South Korea (Seoul), Singapore, Malaysia (Kuala Lumpur), Indonesia (Jakarta), Philippines (Manila), Thailand (Bangkok), UK (London), UAE (Dubai) | Buckets criados após a entrada em vigor da política | text/html | |
14:00, 25 de novembro de 2019 | China (Hong Kong) | Buckets criados após a entrada em vigor da política | text/html | |
17:00, 23 de setembro de 2019 | China (Hohhot) | Buckets criados após a entrada em vigor da política | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic, text/html | |
11:00, 24 de setembro de 2019 | China (Qingdao), China (Chengdu) | Buckets criados após a entrada em vigor da política | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic, text/html | |
17:00, 24 de setembro de 2019 | China (Zhangjiakou) | Buckets criados após a entrada em vigor da política | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic, text/html | |
17:00, 29 de setembro de 2019 | China (Shanghai), China (Shenzhen) | Buckets criados após a entrada em vigor da política | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic, text/html | |
18:00, 29 de setembro de 2019 | China (Beijing) | Buckets criados após a entrada em vigor da política | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic, text/html | |
15:00, 30 de setembro de 2019 | China (Hangzhou) | Buckets criados após a entrada em vigor da política | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic, text/html | |
00:00, 09 de outubro de 2022 | Buckets criados por usuários que ativaram o OSS pela primeira vez após as 00:00 de 9 de outubro de 2022 | |||
10:00, 22 de dezembro de 2025 | China (Ulanqab), China (Heyuan), China (Guangzhou), China (Nanjing - Local Region - Phasing Out) | Buckets criados após a entrada em vigor da política | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic |
Endpoints de aceleração
|
Data de vigência |
Região |
Recursos afetados |
Tipos de arquivo afetados |
Código de erro |
|
00:00, 31 de dezembro de 2020 |
Buckets com aceleração de transferência ativada após a entrada em vigor da política |
text/html |
||
|
12:00, 07 de janeiro de 2021 |
UAE (Dubai) |
Buckets com aceleração de transferência ativada após a entrada em vigor da política |
||
|
18:00, 07 de janeiro de 2021 |
Malaysia (Kuala Lumpur), UK (London) |
Buckets com aceleração de transferência ativada após a entrada em vigor da política |
||
|
18:00, 08 de janeiro de 2021 |
Japan (Tokyo), Indonesia (Jakarta), Germany (Frankfurt) |
Buckets com aceleração de transferência ativada após a entrada em vigor da política |
||
|
12:00, 14 de janeiro de 2021 |
US (Silicon Valley), US (Virginia), Singapore |
Buckets com aceleração de transferência ativada após a entrada em vigor da política |
||
|
00:00, 16 de janeiro de 2021 |
China (Hong Kong) |
Buckets com aceleração de transferência ativada após a entrada em vigor da política |
||
|
00:00, 09 de outubro de 2022 |
Buckets criados por usuários que ativaram o OSS pela primeira vez após as 00:00 de 9 de outubro de 2022 |
|||
|
00:00, 01 de fevereiro de 2023 |
South Korea (Seoul), Philippines (Manila), Thailand (Bangkok) |
Buckets com aceleração de transferência ativada após a entrada em vigor da política |