【问题标题】:Download Unsuccessful when using DownloadManager.Request to download the file from url使用 DownloadManager.Request 从 url 下载文件时下载不成功
【发布时间】:2016-12-29 13:34:55
【问题描述】:

我正在尝试使用 DownloadManager 从服务器下载文件,但下载失败并说“下载失败”,我已阅读以下链接中的下载管理器存在问题 android-chrome-browser-unnecessarily-renames-names-types-of-downloaded-files 所以我尝试通过使用以下方法将 RequestHeader 添加到 DownloadManagerRequest 来下载文件,但没有任何反应。请在我的 Downloader 类中找到以下代码部分,任何人请建议我使用 DownloadManager 从 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;
}

返回 appcookie 管理器

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;
};

【问题讨论】:

    标签: android android-download-manager


    【解决方案1】:

    请删除标题并设置 mimetype,然后它将起作用。例如

     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();
        }
    }
    

    【讨论】:

    • 我测试并发现它不适用于android 9,但适用于android 6。
    猜你喜欢
    • 2021-02-06
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2017-01-31
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多