2016-06-14 15 views
0

Hilfe, ich brauche rufen Sie die http.request für senden Bild in Kamera aufgenommen api in meiner NativeScript App.Nativescript - Wie zu POST-Bild mit http.request

Ich capture das Foto in der Kamera API für nativescript und muss an API im Upload-Prozess senden.

Folgen Sie den Code zu diesem Prozess:

var frameModule = require("ui/frame"); 
var viewModule = require("ui/core/view"); 
var Observable = require("data/observable").Observable; 
var config = require("../../shared/config"); 
var cameraModule = require("camera"); 
var imageModule = require("ui/image"); 
var http = require("http"); 

exports.loaded = function(args) { 
    var page = args.object; 
    viewModel = new Observable({ 
     coleta: config.id_coleta 
    }); 
    page.bindingContext = viewModel; 
}; 

exports.voltar = function() { 
    var topmost = frameModule.topmost(); 
    topmost.navigate("views/ocorrencia/menuocorrencia"); 
}; 

function tapFoto() { 

    cameraModule.takePicture({ 
     width: 300, 
     height: 300, 
     keepAspectRatio: true 
    }).then(function(picture) { 

    var image = new imageModule.Image(); 

    image.imageSource = picture; 
    var item = { 
     itemImage: picture 
    }; 

    var urlfoto = "http://192.1.1.1:8090/sendphoto/upload"; 
    alert("URL: " + urlfoto); 

    http.request({ 
     url: urlfoto, 
     method: "POST", 
     headers: { 
     "Content-Type": "multipart/form-data"   
    }, 
    content: ({uploadFile: image.imageSource, entrega: config.id_coleta})    
    }).then(function (response) { 
     var statusCode = response.statusCode; 
     alert("Codigo Retorno: " + statusCode); 
     alert("Foto registrada com sucesso."); 
    }, function (e){ 
     alert("Erro: " + e); 
    }); 

    }); 

} 

exports.tapFoto = tapFoto; 
+0

Vielleicht sagen Sie uns, was das Problem ist? –

Antwort

2

ich für das Hochladen von Dateien nativescript-Hintergrund-http-Plugin empfehlen.

tns plugin add nativescript-background-http 

Hier ist der Code modifed mit dem installierten Plugin zu arbeiten:

"use strict"; 
var Observable = require("data/observable").Observable; 
var cameraModule = require("camera"); 
var fs = require("file-system"); 

var bghttpModule = require("nativescript-background-http"); 
var session = bghttpModule.session("image-upload"); 

var viewModel = new Observable(); 

function navigatingTo(args) { 
    var page = args.object; 
    page.bindingContext = viewModel; 
} 
exports.navigatingTo = navigatingTo; 

function onTap() { 
    cameraModule.takePicture({ 
     width: 300, 
     height: 300, 
     keepAspectRatio: true 
    }).then(function (imageSource) { 
     console.log("Image taken!"); 
     var folder = fs.knownFolders.documents(); 
     var path = fs.path.join(folder.path, "Test.png"); 
     var saved = imageSource.saveToFile(path, "png"); 
     var request = { 
      url: "http://httpbin.org/post", 
      method: "POST", 
      headers: { 
       "Content-Type": "application/octet-stream", 
       "File-Name": "Test.png" 
      }, 
      description: "{ 'uploading': " + "Test.png" + " }" 
     }; 

     var task = session.uploadFile(path, request); 
     task.on("progress", logEvent); 
     task.on("error", logEvent); 
     task.on("complete", logEvent); 

     function logEvent(e) { 
      console.log("----------------"); 
      console.log('Status: ' + e.eventName); 
      // console.log(e.object); 
      if (e.totalBytes !== undefined) { 
       console.log('current bytes transfered: ' + e.currentBytes); 
       console.log('Total bytes to transfer: ' + e.totalBytes); 
      } 
     } 
    }); 
} 
exports.onTap = onTap; 
+0

Funktioniert das nur für Bilder oder kann es auch Videos hochladen? –

+0

Im obigen Beispiel wird die Funktion 'saveFile' von' imageSource' verwendet, so dass Sie Bilder nur auf diese Weise speichern können. Wenn Sie eine Datei speichern möchten, können Sie das fil-system-Modul mit seinen Lese-/Schreibmethoden verwenden. Schauen Sie hier für Details http://docs.nativescript.org/cookbook/file-system#readingwriting-binary-data-fromto-a-file –

+0

Ich bin in der Lage, meine Video-Dateien gut zu schreiben. Ich möchte wissen, ob ich sie mit dem Plugin 'nativescript-background-http' hochladen kann. –