来自API而不是服务器的Phonegap下载文件

时间:2015-09-17 21:46:42

标签: cordova api download

我正在开发一个Phonegap / Cordova应用程序,我可以使用FileTransfer插件下载文件并将其放入手机的根文件夹中。该文件是托管在服务器上的简单图像。

但是,我正在尝试下载由我的API生成的文件(文件未托管在服务器上)。一旦你点击api,它就会返回一个二进制文件流。这个代码在浏览器中使用AJAX完成时效果非常好,但它在我的Android手机上无法运行(测试)。当我这样做时,我收到错误代码1。

如果我的URI是在实际服务器上托管的文件,我的fileTransfer.download运行良好。

我的返回文件的API采用以下格式:

http://api.mydomainname.com/file/23

其中23是文件ID。

这是我的代码:

document.addEventListener("deviceready", onDeviceReady, true);

var store;
var assetURL = encodeURI("http://api.mydomainname.com/file/23");
var fileName = "test.xlsx";

function onDeviceReady() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotSys, fail);
}

function gotSys(fileSystem) {
    alert("Got FS");
    store = fileSystem.root;
    alert('Checking file: ' + store.toURL() + fileName);
    window.resolveLocalFileSystemURL(store.toURL() + fileName, appStart, downloadAsset);
}

function downloadAsset() {
    var fileTransfer = new FileTransfer();
    alert("About to start transfer");
    fileTransfer.download(assetURL, store.toURL() + fileName,
        function (entry) {
            alert("Success!");
        },
        function (err) {
            alert("Download error : " + err.code);
        });
}

function appStart() {
    alert('file exists');
    alert(store.toURL() + fileName);
}

function fail(error) {
    alert("fail error: " + error);
}

我尝试的C#返回(其中一次尝试)是:

response = new HttpResponseMessage(HttpStatusCode.OK); 
response.Content = new StreamContent(new MemoryStream(docData)); 

response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");

response.Content.Headers.Add("Content-Type", "application/octet-stream");
response.Content.Headers.ContentDisposition.FileName = doc.DocumentName; 
return response;

我试图返回二进制文件,json(带文件二进制内容)等等。有什么建议吗?是否可以下载未托管在服务器上的文件?

由于

2 个答案:

答案 0 :(得分:0)

@Yura,
您可能会遇到 white-list 插件问题。您需要将 white-list 插件添加到您的应用程序中。在此,您还应该看到编译器和插件的版本。

请参阅:

您还需要阅读 Cordova / Phonegap新手的开发人员的主要错误
https://github.com/jessemonroy650/top-phonegap-mistakes/blob/master/new-to-Phonegap.md

  • 10不在config.xml中添加新的“white-list”和“white-list plugin”参数。
  • 6未为编译器设置“phonegap version”
  • 7没有为你的插件设置“版本”

祝你好运,
杰西

答案 1 :(得分:0)

一个文本框,一个提交按钮和另一个具有名称的文本框,单击提交按钮后,应将文件下载为文本文件。

这是使用以下html代码实现的...

<!DOCTYPE html>
<html>
<head>
<style>
form * {
  display: block;
  margin: 10px;
}
</style>
<script language="Javascript" >
function download(filename, text) {
  var element = document.createElement('a');
  element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
  element.setAttribute('download', filename);

  element.style.display = 'none';
  document.body.appendChild(element);

  element.click();

  document.body.removeChild(element);
}
</script>
</head>
<body>

<form onsubmit="download(this['name'].value, this['text'].value)">
  <input type="text" name="name" value="test.txt">
  <textarea name="text">Please download the text and see it carefully. </textarea>
  <input type="submit" value="Download">
</form>
</body>
</html>

我希望这可以在cordova phonegap文件传输插件中实现。

这将帮助用户下载在此处自己创建的文件。

尝试了很多地方,但无法获得。