Android:如何从动态url网络视图下载文件

Android:如何从动态url网络视图下载文件,android,webview,Android,Webview,在我的应用程序中,我使用webview浏览到一个站点,使用javascript自动填写一个web表单,然后提交以获得指向CSV导出文件的链接。 该链接如下所示:XYZ.com/TEST/index/getexport?id=130 我想下载此URL指向的文件,然后在完成后将其读入本地数据库,但下载链接文件时遇到问题 如果我只是尝试在webview中打开URL,我会从网页上得到一个错误,告诉我不存在这样的文件 如果我自己使用下载管理器下载,则源代码将作为html文件下载,而不是相关的.csv文件

在我的应用程序中,我使用webview浏览到一个站点,使用javascript自动填写一个web表单,然后提交以获得指向CSV导出文件的链接。 该链接如下所示:XYZ.com/TEST/index/getexport?id=130

我想下载此URL指向的文件,然后在完成后将其读入本地数据库,但下载链接文件时遇到问题

如果我只是尝试在webview中打开URL,我会从网页上得到一个错误,告诉我不存在这样的文件

如果我自己使用下载管理器下载,则源代码将作为html文件下载,而不是相关的.csv文件

我可以用ACTION_VIEW意图打开url,浏览器(chrome)下载正确的文件,但这样我就不会通知下载何时完成


您知道如何下载我的.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设置定义哪些其他东西?