Maison > Questions et réponses > le corps du texte
P粉0717437322023-08-17 12:50:47
L'extension du fichier n'a en fait pas grand-chose à voir avec ça... Content-Type
L'en-tête oui.
D'après votre description, je suppose que lors de la réception des fichiers PDF, le serveur n'utilise pas le type correct dans la réponse, mais les envoie plutôt sous la forme application/octet-stream
ou un autre type. (Il s'agit d'un type courant et les navigateurs les téléchargent par défaut.)
Il existe plusieurs façons de résoudre ce problème. Une solution consiste à utiliser un ServiceWorker pour remplacer l'en-tête Content-Type
si nécessaire. Cependant, cela ne fonctionne pas toujours. Les navigateurs désactivent souvent les service Workers lorsqu'une page est obligée de recharger ou lorsque le mode de confidentialité est activé.
Une autre approche plus proche de ce que vous proposez est de mettre le PDF en mémoire en JavaScript. Vous pouvez le faire à l'aide de l'API Fetch, puis créer une URL Blob et laisser le navigateur la télécharger. Pas encore testé, mais voici l'essentiel :
const res = await fetch('https://example.com/doc.pdf.fake-ext'); if (!res.ok) { throw new Error(`${res.status} ${res.statusText}`); } const blob = await res.blob(); const blobUrl = URL.createObjectURL(blob); // 现在,您可以直接链接或重定向到`blobUrl`。 // 完成后一定要释放它,使用URL.revokeObjectURL()。
Veuillez noter que cela peut ne pas fonctionner pour les documents particulièrement volumineux. Les petits documents ne posent aucun problème.
Notez également que tous les navigateurs ne peuvent pas afficher les PDF et que tous les systèmes ne sont pas configurés pour permettre aux navigateurs d'afficher les PDF de manière autonome.