/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ var exec = require('cordova/exec'), FileTransferError = require('cordova/plugin/FileTransferError'); // Note that the only difference between this and the default implementation is the // object literal passed to exec() in upload - jm /** * FileTransfer uploads a file to a remote server. * @constructor */ var FileTransfer = function() {}; /** * Given an absolute file path, uploads a file on the device to a remote server * using a multipart HTTP request. * @param filePath {String} Full path of the file on the device * @param server {String} URL of the server to receive the file * @param successCallback (Function} Callback to be invoked when upload has completed * @param errorCallback {Function} Callback to be invoked upon error * @param options {FileUploadOptions} Optional parameters such as file name and mimetype * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false */ FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, trustAllHosts) { // sanity parameter checking if (!filePath || !server) throw new Error("FileTransfer.upload requires filePath and server URL parameters at the minimum."); // check for options var fileKey = null; var fileName = null; var mimeType = null; var params = null; var chunkedMode = true; if (options) { fileKey = options.fileKey; fileName = options.fileName; mimeType = options.mimeType; if (options.chunkedMode !== null || typeof options.chunkedMode != "undefined") { chunkedMode = options.chunkedMode; } // if options are specified, and NOT a string already, we will stringify it. if(options.params && typeof options.params != typeof "") { var arrParams = []; for(var v in options.params) { arrParams.push(v + "=" + options.params[v]); } params = encodeURI(arrParams.join("&")); } } var fail = function(e) { var error = new FileTransferError(e.code, e.source, e.target, e.http_status); errorCallback(error); }; exec(successCallback, fail, 'FileTransfer', 'upload', [{"filePath":filePath, "server":server, "fileKey":fileKey, "fileName":fileName, "mimeType":mimeType, "params":params, "trustAllHosts":trustAllHosts, "chunkedMode":chunkedMode}]); }; /** * Downloads a file form a given URL and saves it to the specified directory. * @param source {String} URL of the server to receive the file * @param target {String} Full path of the file on the device * @param successCallback (Function} Callback to be invoked when upload has completed * @param errorCallback {Function} Callback to be invoked upon error */ FileTransfer.prototype.download = function(source, target, successCallback, errorCallback) { // sanity parameter checking if (!source || !target) throw new Error("FileTransfer.download requires source URI and target URI parameters at the minimum."); var win = function(result) { var entry = null; if (result.isDirectory) { entry = new (require('cordova/plugin/DirectoryEntry'))(); } else if (result.isFile) { entry = new (require('cordova/plugin/FileEntry'))(); } entry.isDirectory = result.isDirectory; entry.isFile = result.isFile; entry.name = result.name; entry.fullPath = result.fullPath; successCallback(entry); }; var fail = function(e) { var error = new FileTransferError(e.code, e.source, e.target, e.http_status); errorCallback(error); }; exec(win, errorCallback, 'FileTransfer', 'download', [source, target]); }; module.exports = FileTransfer;