2017-09-12 7 views
0

J'ai réussi à télécharger des fichiers de stockage Google avec GCP télécharger resumable JSON (api): https://cloud.google.com/storage/docs/json_api/v1/how-tos/resumable-uploadLe téléchargement de l'API JSON de Google Cloud Platform Storage casse les fichiers audio ..?! Comment réparer?

En utilisant jQuery et Plupload http://www.plupload.com

Mais maintenant, il semble que les fichiers audio perd leurs codecs en téléchargement et ceux gagnés 't jouer ou ffmpeg ne peut pas sonder ceux-ci. Plus de tests ont montré qu'en fait les fichiers .flac sont compatibles avec ffmpeg, mais par exemple les fichiers .m4a ne le sont pas.

Je dois obtenir la plupart des fichiers audio téléchargés sur google storage et être capable de sonder ceux avec ffmpeg. Et doit être capable de télécharger de gros fichiers sur 100Mb. C'est pourquoi je crois que l'API JSON est meilleure ou seulement possible.

Je pense que j'ai ajouté des métadonnées correctement, mais maintenant je suis confus comment continuer .. Des idées quel pourrait être le problème ici?

EDIT (plus d'info):

J'avais du logiciel:

  • Utilisation de la poste>/temp> Client Google Cloud Storage (php).
  • GCP Storage Client a téléchargé les fichiers à la perfection.
  • Même si j'ai nommé les fichiers téléchargés avec un nom unique aléatoire comme "woeiwehf.tmp", ceux-ci ont bien fonctionné et ffmpeg pourrait les examiner correctement.

alors quelque chose est arrivé, je pense que le téléchargement comme cela a été limité (ou quelque chose):

  • Ce qui signifie que ma solution ne pouvait pas télécharger des fichiers plus gros, plus 32Mb.

  • Eh bien, ce n'était pas la meilleure solution de toute façon, donc c'est ok, que cela a changé.

MAINTENANT:

  • J'ai logiciel changé il utilise l'API GCP JSON télécharger resumable, et cela fonctionne principalement
  • Mais je devais changer des fichiers à ressembler à « woeiwehf.flac "ou quel que soit le type est. ".tmp" ne fonctionnait plus.
  • Par exemple, les fichiers .flac fonctionnent bien, mais pas .m4a.
  • J'ai testé le téléchargement de plusieurs façons, et il semble que le téléchargement de l'API JSON perd au moins les codecs et le débit binaire.

-

Je serais très reconnaissant si je pouvais obtenir de l'aide comment résoudre ce problème. Je suppose qu'une solution pourrait être de four- nir le client ffmpeg et de régler manuellement le codec audio, mais je garde cela pour la dernière solution.

+0

Etes-vous en train d'essayer d'accéder aux fichiers téléchargés à l'aide d'un navigateur? Si oui, quel type de contenu définissez-vous sur les métadonnées pour les fichiers qui ne sont pas lus correctement? –

+0

@MikeSchwartz J'ai testé des fichiers avec le navigateur dans le stockage GCP. Lorsque vous chargez des fichiers manuellement dans le stockage, il définit le type de contenu "audio/x-m4a" (cela fonctionne), ce que j'ai forcé dans mon téléchargement de logiciel. Il va dans l'en-tête "X-Upload-Content-Type". Plupload essaie automatiquement d'utiliser "audio/mp4", mais cela n'a pas fonctionné. – Zolai

+0

Je ne suis pas clair à partir de votre réponse si vous avez toujours un problème. Il semble que vous disiez que le réglage du type de contenu en audio/x-m4a fonctionne. –

Répondre

0

1.POST demande à l'API Google JSON doit être exactement comme Google docs dit

(Exemple: https://cloud.google.com/storage/docs/json_api/v1/how-tos/resumable-upload)

Enfin je l'ai fait travailler avec la réponse de cette question: Upload file to Google cloud storage from Google App Engine (Java)

Merci à l'utilisateur https://stackoverflow.com/users/3371862/renaud-t

function uploadFile(fileData, bucket) { 
    var boundary = '-------314159265358979323846'; 
    var delimiter = "\r\n--" + boundary + "\r\n"; 
    var close_delim = "\r\n--" + boundary + "--"; 
    var reader = new FileReader(); 
    reader.readAsBinaryString(fileData); 

    reader.onload = function (e) { 
     var contentType = fileData.type || 'application/octet-stream'; 
     var metadata = { 
      'name': fileData.name, 
      'mimeType': contentType 
     }; 
     var base64Data = btoa(reader.result); 
     var multipartRequestBody = 
       delimiter + 
       'Content-Type: application/json\r\n\r\n' + 
       JSON.stringify(metadata) + 
       delimiter + 
       'Content-Type: ' + contentType + '\r\n' + 
       'Content-Transfer-Encoding: base64\r\n' + 
       '\r\n' + 
       base64Data + 
       close_delim; 

     var request = gapi.client.request({ 
      'path': '/upload/storage/v1/b/' + bucket + '/o', 
      'method': 'POST', 
      'params': {'uploadType': 'multipart'}, 
      'headers': { 
       'Content-Type': 'multipart/mixed; boundary="' + boundary + '"' 
      }, 
      'body': multipartRequestBody 
     }); 

     try { 
      request.execute(function (resp) { 
       if (resp.hasOwnProperty("error")) { 
        //Treat Error 
       } else { 
        //Treat Success 
       } 
      }); 
     } 
     catch (e) { 
      //Treat Error 
     } 

    }; 

} 

2. Utilisez Google API client Library Javascript

https://developers.google.com/api-client-library/javascript/start/start-js

GAPI Guide du client indique que vous devez utiliser la méthode "then", j'ai donc légèrement modifié le code ci-dessus.

var request = gapi.client.request({ 
    'path': url, 
    'method': 'POST', 
    'params': {'uploadType': 'multipart'}, 
    'headers': { 
    'Content-Type': 'multipart/mixed; boundary="' + boundary + '"' 
    }, 
    'body': multipartRequestBody 
}).then(function(response) { 
    // Handle response 
    }, function(reason) { 
    // Handle error 
    } 
);