2017-01-25 2 views
1

Ich habe diese Curl-Anfrage funktioniert.Wie write 'PUT' Anfrage in Knoten mit 'Anfrage' Modul schreiben

curl -v "https://developer.api.autodesk.com/oss/v2/buckets/:bucketName/objects/" 
-X "PUT" -H "Authorization: Bearer tokenGoesHere" 
-H "Content-Type: application/octet-stream" -T "forupload.rvt" 

Wie kann ich dies in Knoten mit Npm Anfrage-Modul schreiben. Ich habe folgendes mit 'request' und 'fs' versucht. Ich bekomme zurück "Token ist nicht in der Anfrage enthalten".

+0

Versuchen Sie so etwas wie die folgenden für Ihre Wahlen: '{ uri: ..., Header: { 'Authorization': authorizationHeader, ‚Content-Type ': contentTypeHeader }, Körper: ... } ' –

+0

Sie stehen vor einem bestimmten Fehler? –

+0

@Mukesh Sharma Der Fehler ist 'Token ist nicht in der Anfrage enthalten. Danke –

Antwort

2

Nach mehreren Versuchen, während ich Ihr spezifisches Problem nicht reproduzieren konnte, war das Problem, das ich hatte, mit dem binären Anhang ordnungsgemäß geladen. Da createReadStream() asynchron ausgeführt wird, scheint es nicht so zu funktionieren, wie die Anforderungsdokumente sagen, wenn es zu den Schlüsseln multipart oder formData hinzugefügt wird. Nicht sicher, warum das ist?

Ich habe es funktioniert zuerst mit http://requestb.in - Vergleich der Curl-Anfrage mit der gleichen Anfrage mit Node konstruiert. Hier ist die letzte, Arbeitsversion:

var request = require('request') 
fs = require('fs') 

var options = { 
    uri: 'https://developer.api.autodesk.com/oss/v2/buckets/<yourBucket>/objects/<yourFile.ext>', 
    headers: { 
     'Content-Type': 'application/octet-stream', 
     'Authorization': 'Bearer <token>' 
    } 
} 

fs.createReadStream(__dirname + '/<fileName.ext>').pipe(request.put(options, function(err, response, body) { 
    console.log(body) 
    /* 
     { 
      "bucketKey" : "< yourBucket>", 
      "objectId" : "urn:adsk.objects:os.object:brandontestbucket2/skyscpr1.3ds", 
      "objectKey" : "<fileName.ext>", 
      "sha1" : "...redacted...", 
      "size" : 43791, 
      "contentType" : "application/octet-stream", 
      "location" : "https://developer.api.autodesk.com/oss/v2/buckets/< yourBucket>/objects/<fileName.ext>" 
     } 
    */ 
})) 
+0

Ich hatte einen Fehler am Ende meiner URI, wo ich meiner hochgeladenen Datei keinen Namen gab. Nachdem ich diese Korrektur vorgenommen habe, habe ich beide Methoden ausprobiert und bekomme "mehrteiligen Inhalt nicht erlaubt" zurück. Wie kann ich meine Anfrage an die Konsole senden? Vielen Dank für Ihre Antwort. –

+0

Ich würde vorschlagen, requestb.in zu versuchen: Senden Sie Ihre Node-Anfrage und Ihre Curl-Anfrage an eine Bin und vergleichen Sie die Anfragen. Das heißt, wenn die API mit "Multi-Part not allowed" antwortet, würde ich vorschlagen, ihre Dokumente auschecken, um herauszufinden, wie die richtige Weise ist, um die Anfrage zu stellen. – brandonscript

+0

Ich entschied mich, child_process zu verwenden, um die curl-Anfrage von der Kommandozeile auszuführen und stdout zu erfassen. Ich werde dies bei Bedarf wiederholen. Vielleicht api mag nicht, wie Read Stream die Datei serviert ... Ich werde diese Antwort akzeptieren, da es scheint, eine genaue Übersetzung der Curl-Anfrage gebucht aber createReadStream kann nicht gut mit diesem Autodesk API spielen. Vielen Dank. –