2017-12-12 4 views
0

Ich versuche, in dieser Javascript-Funktion eine lokale .png-Datei als Funktionsargument zu verwenden, um es OpenCPU weitergeben müssen:senden lokales Bild R-Funktion opencpu

function processWithR(promObj) { 

    return new Promise((resolve, reject) => { 
     try { 

      var url = "https://public.opencpu.org/ocpu/github/amun-software/Processingservice/R/NDVI_Result"; 
      request({ 
       method: "POST", 
       uri: url, 
       formData: { 
        x:fs.createReadStream('./temp/red/' + promObj.z + '-' + promObj.x + '-' + promObj.y + '.png'), 
        y:fs.createReadStream('./temp/blue/' + promObj.z + '-' + promObj.x + '-' + promObj.y + '.png') 
       }, 
      }, function (err, response, data) { 
       err = err || (response && (response.statusCode === 400 || 
        response.statusCode === 502 || 
        response.statusCode === 503) && response.statusCode); 
       if (!err) { 
        console.log(body); 
       } 
      }); 
      console.log("2. Promise Processing with R"); 

      fileSave(promObj); 
      resolve(promObj) 
     } catch (error) { 
      reject(error) 
     } 
    }) 

} 

Diese Funktion ruft mir den status Error 400.

Der formData-Teil der Anforderung liest nur zwei lokale .png-Dateien ein. Wenn ich dies auf der OpenCPU-Testseite versuche, funktioniert es, indem ich die zwei Dateien hochlade. Ich kann einfach nicht herausfinden, wie man die Dateien als Argumente richtig an die Anfrage weitergibt.

UPDATE

Ich fand heraus, dass die Anforderung selbst in Ordnung war. Ich erhalte den Fehler von OpenCPU:

file.copy(x$tmp_name, basename(x$name)) is not TRUE 

Ich habe versucht, die Formulardaten in base64 zu kodieren, aber dann bekomme ich diesen Fehler:

In call: 
.rasterObjectFromFile(x, band = band, objecttype = "RasterLayer", 
...) 

Nun werden die Daten R gesendet, sondern wegen der Die Kodierung, R kann daraus keinen RasterLayer erstellen. Wie könnte ich das lösen?

Antwort

0

Ich fand heraus, war mein Fehler war. Beide Dateien wurden gleich benannt, weshalb dieser Fehler aufgetreten ist. Hoffe, das wird jemand anderem helfen.