Android:如何从动态url网络视图下载文件
在我的应用程序中,我使用webview浏览到一个站点,使用javascript自动填写一个web表单,然后提交以获得指向CSV导出文件的链接。 该链接如下所示:XYZ.com/TEST/index/getexport?id=130 我想下载此URL指向的文件,然后在完成后将其读入本地数据库,但下载链接文件时遇到问题 如果我只是尝试在webview中打开URL,我会从网页上得到一个错误,告诉我不存在这样的文件 如果我自己使用下载管理器下载,则源代码将作为html文件下载,而不是相关的.csv文件 我可以用ACTION_VIEW意图打开url,浏览器(chrome)下载正确的文件,但这样我就不会通知下载何时完成Android:如何从动态url网络视图下载文件,android,webview,Android,Webview,在我的应用程序中,我使用webview浏览到一个站点,使用javascript自动填写一个web表单,然后提交以获得指向CSV导出文件的链接。 该链接如下所示:XYZ.com/TEST/index/getexport?id=130 我想下载此URL指向的文件,然后在完成后将其读入本地数据库,但下载链接文件时遇到问题 如果我只是尝试在webview中打开URL,我会从网页上得到一个错误,告诉我不存在这样的文件 如果我自己使用下载管理器下载,则源代码将作为html文件下载,而不是相关的.csv文件
您知道如何下载我的.CSV文件吗?要从webview下载文件,请使用以下命令:
mWebView.setDownloadListener(new DownloadListener(){
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength){
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});
希望这有帮助。您可以使用异步任务从url手动下载文件 以下是背景部分:
@Override
protected String doInBackground(Void... params) {
String filename = "inputAFileName";
HttpURLConnection c;
try {
URL url = new URL("http://someurl/" + filename);
c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
} catch (IOException e1) {
return e1.getMessage();
}
File myFilesDir = new File(Environment
.getExternalStorageDirectory().getAbsolutePath()
+ "/Download");
File file = new File(myFilesDir, filename);
if (file.exists()) {
file.delete();
}
if ((myFilesDir.mkdirs() || myFilesDir.isDirectory())) {
try {
InputStream is = c.getInputStream();
FileOutputStream fos = new FileOutputStream(myFilesDir
+ "/" + filename);
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();
} catch (Exception e) {
return e.getMessage();
}
if (file.exists()) {
return "File downloaded!";
} else {
Log.e(TAG, "file not found");
}
} else {
Log.e(TAG, "unable to create folder");
}
}
也许重构它以便返回文件是有意义的。下载完成后,立即在onPostExecute中将该文件作为参数获取。我已经研究过这种方法,但我的下载URL不包含文件名。如果在URL上发出get命令生成文件,我认为它仍然有效。当然,您必须相应地更改代码,为文件创建一个名称,以便可以在手机上创建该文件。只要尝试一下,它就会下载html源代码,而不是我要的文件。这与本机浏览器的操作有什么不同?如果在浏览器中使用相同的地址,则会得到csv?看起来响应的标题不正确…是的-如果我使用ACTION.VIEW将其提交到Android的Chrome浏览器,甚至复制/粘贴到PC浏览器中,则会触发正确的下载。我无法控制网页的内容,这让事情变得有点棘手…把它放在哪里,以及需要为WebView设置定义哪些其他东西?