Skip to content

Cayan/nativescript-background-http

Repository files navigation

About

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.

Source

License

Apache-2.0

Installation

Install

tns plugin add nativescript-background-http

Install plugin using AppBuilder CLI

appbuilder plugin add nativescript-background-http

Install plugin using AppBuilder IDE

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.

Usage

For sample application with single and multiple image selection ready for Android and IOS follow this link

How-To Background Upload

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);
}

How-To Data Binding

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>

Node.js Server

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);

You can check the example server in the source.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published