我正在开发一个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(带文件二进制内容)等等。有什么建议吗?是否可以下载未托管在服务器上的文件?
由于
答案 0 :(得分:0)
@Yura,
您可能会遇到 white-list 插件问题。您需要将 white-list 插件添加到您的应用程序中。在此,您还应该看到编译器和插件的版本。
请参阅:
您还需要阅读
Cordova / Phonegap新手的开发人员的主要错误
https://github.com/jessemonroy650/top-phonegap-mistakes/blob/master/new-to-Phonegap.md
祝你好运,
杰西
答案 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文件传输插件中实现。
这将帮助用户下载在此处自己创建的文件。
尝试了很多地方,但无法获得。