使用DownloadManager.Request从URL下载文件时下载失败

4
我正在尝试使用DownloadManager从服务器下载文件,但是下载失败并显示“下载不成功”,我已经阅读了以下链接中的Download Manager问题:android-chrome-browser-unnecessarily-renames-names-types-of-downloaded-files,所以我尝试通过在DownloadManagerRequest中添加RequestHeader来下载文件,但是没有任何反应。请查看下面Downloader类代码片段,有人可以建议我使用正确的方法从URL下载文件吗? url:
http://-storage.net/95-****/95-3194.pdf?AWSAccessKeyId=T9YG9HWQC1LHE5G5VF38&Expires=1483443248&Signature=Z%2BkWzfEI2VawbCx%2F2Yto1kPcJKA%3D
谢谢
public void download(Uri uri) {
    if (!isDownloading()) {
        String fileName=getName(uri);
        DownloadManager.Request request = new DownloadManager.Request(uri);
        request.setTitle(fileName);
        request.setNotificationVisibility(1);
        request.allowScanningByMediaScanner();
        request.addRequestHeader("Content-Type", "application/octet-stream");
        request.addRequestHeader("Content-Disposition", "attachment; filename=\""+fileName.split("\\.")[0]+"."+fileName.split("\\.")[1].toUpperCase()+"\"");
        String cookieContent = getCookieFromAppCookieManager(uri.getHost());
        request.addRequestHeader("Cookie", cookieContent);
        downloadId = downloadManager.enqueue(request);
        register();
    }
}

以下代码块返回文件名

private String getName(Uri uri) {
    String name=uri.toString().split("jabord/")[1].split("\\?")[0];
    return name;
}

返回应用程序cookie管理器

public String getCookieFromAppCookieManager(String url) {
    android.webkit.CookieManager cookieManager = android.webkit.CookieManager.getInstance();
    if (cookieManager == null) {
        return null;
    }
    String rawCookieHeader = null;

    // Extract Set-Cookie header value from Android app CookieManager for this URL
    rawCookieHeader = cookieManager.getCookie(url);
    if (rawCookieHeader == null) {
        return null;
    }

    return rawCookieHeader;
};
2个回答

2
请删除头部信息并设置MIME类型,然后它就能正常工作了。例如:
 public void download(Uri uri) {
    if (!isDownloading()) {
        String fileName=getName(uri);
        DownloadManager.Request request = new DownloadManager.Request(uri);
        request.setTitle(fileName);
        request.setNotificationVisibility(1);
        request.allowScanningByMediaScanner();
        request.setMimeType("application/pdf");
        Log.e("Extension with ","UpperCase-->"+"\""+fileName.split("\\.")[0]+"."+fileName.split("\\.")[1].toUpperCase()+"\"");
        downloadId = downloadManager.enqueue(request);
        register();
    }
}

2
我测试过后发现该程序在安卓9中无法运行,但是在安卓6中却能正常工作。 - Faisal Hassan

0

我之前也遇到过同样的问题。我通过删除 cookies 来解决了它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接