使用 DownloadManager.Request 从 url 下载文件时下载失败
Download Unsuccessful when using DownloadManager.Request to download the file from url
我正在尝试使用 DownloadManager 从服务器下载文件,但下载失败并显示“下载不成功”,我读到下面的下载管理器存在问题 link
android-chrome-browser-unnecessarily-renames-names-types-of-downloaded-files 所以我尝试通过使用以下方法将 RequestHeader 添加到 DownloadManagerRequest 来下载文件,但没有任何反应。请找到我的下载程序的以下代码部分 class 任何人请建议我使用 DownloadManager 从 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();
}
}
及以下块 returns 文件名
private String getName(Uri uri) {
String name=uri.toString().split("jabord/")[1].split("\?")[0];
return name;
}
returns 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;
};
请删除 headers 并设置 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();
}
}
我正在尝试使用 DownloadManager 从服务器下载文件,但下载失败并显示“下载不成功”,我读到下面的下载管理器存在问题 link android-chrome-browser-unnecessarily-renames-names-types-of-downloaded-files 所以我尝试通过使用以下方法将 RequestHeader 添加到 DownloadManagerRequest 来下载文件,但没有任何反应。请找到我的下载程序的以下代码部分 class 任何人请建议我使用 DownloadManager 从 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();
}
}
及以下块 returns 文件名
private String getName(Uri uri) {
String name=uri.toString().split("jabord/")[1].split("\?")[0];
return name;
}
returns 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;
};
请删除 headers 并设置 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();
}
}