recherche

Maison  >  Questions et réponses  >  le corps du texte

Lorsque vous essayez de télécharger des vidéos, la lecture est redirigée vers une nouvelle URL, puis la vidéo commence. « Type de contenu jetable » non reçu du serveur

<p>Je souhaite télécharger certaines vidéos en un clic. Pour ce faire, j'ai créé un bouton et attaché une fonction qui doit déclencher le téléchargement de la vidéo concernée. Mais je ne peux télécharger que le lien de la vidéo, pas la vidéo. Je peux télécharger la vidéo à l'aide d'un téléchargeur externe ou simplement faire glisser l'URL dans la section téléchargements du navigateur. Mais l'activité ne peut pas être déclenchée via JavaScript. S'il vous plaît aidez-moi.</p> <p>J'ai essayé plusieurs façons de résoudre ce problème : </p> <ol> <li>Utiliser une technologie blob simple sans Axios : </li> </ol> <pre class="brush:js;toolbar:false;">const blob = new Blob([this.src_url], { type : 'video/mp4' }) lien const = document.createElement('a') lien.href = URL.createObjectURL(blob) lien.download = this.src_url.replace( > ! // 'https://redis-test.com/videos/', lien.cliquez() URL.revokeObjectURL(lien.href) ≪/pré> <p>Point de terminaison : l'URL de la vidéo est téléchargée sous forme de fichier de 122 octets</p> <ol start="2"> <li>Utilisez ensuite le package de protection de fichiers : </li> </ol> <pre class="brush:js;toolbar:false;"> var FileSaver = require('file-saver') console.log(this.src_url) var blob = nouveau Blob([this.src_url], { type : 'video/mp4' }) FileSaver.saveAs(blob, 'bonjour le monde.mp4') ≪/pré> <ol start="3"> <li>Utilisez ensuite la méthode du formulaire : </li> </ol> <pre class="brush:html;toolbar:false;"><form method="get" action="file.doc"> <button type="submit">Télécharger !</button> </formulaire> ≪/pré> <p>Point final : la lecture de la vidéo commence dans la même fenêtre</p> <ol start="4"> <li>Utilisez l'attribut de téléchargement href : </li> </ol> <pre class="brush:js;toolbar:false;">function download(url) { const a = document.createElement('a') a.href = URL a.download = url.split('/').pop() document.body.appendChild(a) a.cliquez() document.body.removeChild(a) }≪/pré> <p>Point final : la lecture de la vidéo commence dans la même fenêtre</p> <ol start="5"> <li>Utilisez votre méthode : </li> </ol> <pre class="brush:js;toolbar:false;">const link = document.createElement('a') lien.href = url lien.cliquez() ≪/pré> <p>Point final : la lecture de la vidéo commence dans la même fenêtre</p> <ol start="6"> <li>Utilise désormais la valeur par défaut d'Axios : </li> </ol> <pre class="brush:js;toolbar:false;"> axios.defaults.withCredentials = true fenêtre.open( 'https://cdn.pixaandom_urlrbay.com/vieo/487508532/Woman%20-%2058142.mp4?rendition=source&expiry=1666842719&hash=7dd6d178d9dbbd8adaf68dafd80c9167e91eca21&download' ) ≪/pré> <p>Point final : la lecture de la vidéo commence dans une nouvelle fenêtre</p> <ol start="7"> <li>Utilisez AXIOS pour ajouter un type de contenu unique dans l'en-tête : </li> </ol> <pre class="brush:js;toolbar:false;"> .obtenir( Chaîne (nuxtConfig.axios.mediaURL) + this.src_url.replace( 'https://redisrandom_url.com/videos/', '' ), { en-têtes : { mode : 'sans cors', referrerPolicy : 'non-référent', 'Content-Disposition' : 'pièce jointe ; nom de fichier=Femme - 58142.mp4', Hôte : 'redis-nfs', 'Agent utilisateur' : 'PostmanRuntime/7.29.2', Accepter: '*/*', 'Accepter-Langue' : 'en-US,en;q=0.5', 'Accept-Encoding' : 'gzip, deflate, br', Connexion : 'keep-alive', Biscuits: 'tk_or=%22https%3A%2F%2Fwww.google.com%2F%22 ; tk_lr=%22https%3A%2F%2Fwww.google.com%2F%22 _gcl_au=1.1.954672920.1660108804 ; .1660108808 ; _fbp=fb.1.1660108809200.1970395787', 'Demandes de mise à niveau non sécurisées' : '1', 'Sec-Fetch-Dest' : 'document', 'Sec-Fetch-Mode' : 'naviguer', 'Sec-Fetch-Site' : 'aucun', 'Sec-Fetch-Utilisateur' : '?1', Pragma : « sans cache », 'Cache-Control' : 'pas de cache', }, } ) .then((réponse) => { console.log (réponse) const url = window.URL.createObjectURL(new Blob([response.data])) lien const = document.createElement('a') lien.href = url link.setAttribute('télécharger', 'titre') document.body.appendChild(lien) lien.cliquez() }) .catch((erreur) => { console.log('rex') }) ≪/pré> <blockquote> <p>Point de terminaison : requête d'origine croisée bloquée : la stratégie de même origine ne permet pas de lire la ressource distante sur redis-random_url/videos/be319-72e1-2e79-8dc3-bcef1/…. (Cause : l'en-tête CORS 'Access-Control-Allow-Origin' est manquant). Code d'état : 200</p> </blockquote><p><br /></p>
P粉578343994P粉578343994456 Il y a quelques jours603

répondre à tous(1)je répondrai

  • P粉388945432

    P粉3889454322023-08-29 00:52:35

    Je n'utilise pas VueJS, mais je soupçonne this.src_url que c'est juste le texte du chemin de l'URL de la vidéo.

    En HTML5, vous ne pouvez télécharger que les fichiers qui existent sur le serveur. Si le fichier est externe, vous avez besoin d'un script PHP (sur le même serveur que votre fichier HTML) pour relire ces octets externes dans votre tableau de tampons JS.

    const blob = new Blob([this.src_url], { type: 'video/mp4' })

    devrait être :

    let myBytes = //# update variable with data result of reading files bytes
    let myBlob = new Blob(  [ Uint8Array.from( myBytes ) ] , {type: "application/octet-stream"} );

    La lecture d'octets peut être effectuée à l'aide de l'API FileReader ou de l'API Fetch.

    Votre problème est résolu lorsque vous pouvez lire les octets d'un fichier dans un tableau à l'aide de VueJS.

    répondre
    0
  • Annulerrépondre