2017-10-10 3 views
1

Je rencontre un problème lors du chargement de fichiers dans une session de téléchargement à l'aide de l'API Microsoft Graph v1.0. Mes étapes:Comment formater l'en-tête Content-Range pour l'API Microsoft Graph de la session de téléchargement

  1. Get jeton d'accès: Succès
  2. Sélectionnez Fichier/Créer Ajouter session: Succès (je reviens un uploadURL pour télécharger les octets)
  3. Télécharger Octets à uploadURL: Échec avec l'erreur ci-dessous.

Voici l'erreur que je reçois:

{ 
    "error": 
    { 
     "code":"invalidRequest", 
     "message":"The Content-Range header is missing or malformed." 
    } 
} 

J'ai essayé d'utiliser les formats suivants et je reçois toujours la même erreur.

"bytes 0-100/100" 
"0-100/100" 
"0-100" 

Je suivais cet article de Mircosoft https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/item_createuploadsession

Voici ma fonction uploads au uploadURL retreived de la création de la session de téléchargement

public uploadToSession(file: HTMLInputElement, session: any, fileData: any) { 
    var headers = new Headers(); 
    headers.append('Content-Length', fileData.length); //(ie: "100") 
    headers.append('Content-Range', fileData.range); //(ie: "bytes 0-100/100") 
    this.http.put(session.uploadUrl, { headers }) 
     .subscribe(
      (res: Response) => console.log(res), 
      error => console.log(error) 
     ); 
} 

Toute aide est très appréciée! Merci d'avance.

+0

L'idée derrière cette API est que vous envoyez des morceaux droit? Donc, cela fonctionne s'attendre à ce que la taille totale du fichier soit supérieure à un morceau, c'est-à-dire 'bytes 0-50/100' suivi de' bytes 50-100/100'. – Fenton

+0

Il est vrai que l'API est conçue pour permettre l'envoi de mandrins. Toutefois, d'après ce que je comprends, vous pouvez également envoyer le fichier entier tant que la taille est inférieure à 60 Mio. Avez-vous vu des documents indiquant que vous ne pouvez pas envoyer le fichier entier en même temps? J'essaie d'éviter d'utiliser deux méthodes de téléchargement différentes en fonction de la taille, mais si c'est le seul moyen, alors il en sera ainsi. –

+0

Non - Je n'ai rien trouvé, mais votre code a l'air bien, alors j'innove des problèmes potentiels qui pourraient survenir – Fenton

Répondre

2

L'en-tête Content-Range a le format suivant:

Content-Range: bytes <startindex>-<endindex>/<totallength> 

Votre question semble être un mélange d'indices (base 0) et longueurs (base 1). Pour un fichier de 100 octets, votre en-tête devrait ressembler à:

Content-Range: bytes 0-99/100 
+0

Merci, Brad. Cette valeur devrait-elle être une chaîne? –