2016-06-14 15 views
0

幫助,我需要調用http.request發送在我的NativeScript應用程序中在相機api中捕獲的圖像。Nativescript - 如何使用http.request發佈圖像

我在camera api中捕捉nativescript的照片,需要在上傳過程中發送給api。

按照代碼這個過程:

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

也許你能告訴我們是什麼問題? –

回答

2

我建議上傳文件使用nativescript背景-HTTP插件。

tns plugin add nativescript-background-http 

這裏是你的代碼體改所安裝的插件工作:

"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

這隻適用於圖像,還是可以上傳視頻? –

+0

上面的例子使用'imageSource'中的'saveFile'函數,所以你只能這樣保存圖像。如果你想保存文件,你可以使用帶有讀/寫方法的fil-system模塊。在這裏尋找細節http://docs.nativescript.org/cookbook/file-system#readingwriting-binary-data-fromto-a-file –

+0

我能夠寫我的視頻文件就好。我想知道我是否可以用'nativescript-background-http'插件上傳它們。 –

相關問題