A cross platform plugin for the NativeScript framework, that provides background upload for iOS and Android.
There is a stock NativeScript http
module that can handle GET/POST requests that work with strings and JSONs. It however comes short in features when it comes to really large files.
The plugin uses NSURLSession with background session configuration for iOS; and for android - the alexbbb/android-upload-service that implements an IntentService.
tns plugin add nativescript-background-http
appbuilder plugin add nativescript-background-http
In the Project Navigator, right click your project and choose Manage Packages. Choose the Plugins Marketplace tab. Search or browse for a plugin and click Install.
For sample application with single and multiple image selection ready for Android and IOS follow this link
var bghttp = require("nativescript-background-http");
var session = bghttp.session("image-upload");
var request = {
url: "http://myserver.com",
method: "POST",
headers: {
"Content-Type": "application/octet-stream",
"File-Name": "bigpig.jpg"
},
description: "{ 'uploading': 'bigpig.jpg' }"
};
var task = session.uploadFile("file/path/bigpig.jpg", request);
task.on("progress", logEvent);
task.on("error", logEvent);
task.on("complete", logEvent);
function logEvent(e) {
console.log(e.eventName);
}
Task implementations are Observable and fire property change events for
- upload
- totalUpload
- status
So you can bind to task properties in the UI markup:
<ListView items="{{ tasks }}">
<ListView.itemTemplate>
<StackLayout>
<Label text="{{ upload, 'Upload: ' + upload + ' / ' + totalUpload }}" />
<Progress value="{{ upload }}" maxValue="{{ totalUpload }}" />
<Label text="{{ description, 'description: ' + description }}" />
<Label text="{{ status, 'status: ' + status }}" />
</StackLayout>
</ListView.itemTemplate>
</ListView>
A simple server written in nodejs should look like that:
var http = require("http");
var fs = require("fs");
var server = http.createServer(function(request, response) {
request.pipe(fs.createWriteStream("out_file.bin", { flags: 'w', encoding: null, fd: null, mode: 0666 }));
}
server.listen(8083);