유니버설 Android WebView App을 사용하여 웹 페이지에 액세스하는 앱을 만들고 있습니다. 이 웹 페이지에는 다운로드 가능한 pdfs가 있으며 로그인 한 사용자 만 사용할 수 있습니다. pdf가 플러그인에 의해 생성되고 http 응답으로 전송되기 때문에 기본 제공 다운로드 관리자가 작동하지 않습니다. 직접 연결을 구현하려고 시도했습니다.이 코드를 수정하려고 시도했습니다. http://www.codejava.net/java-se/networking/use-httpurlconnection-to-download-file-from-an-http-urlwebview에서 플러그인으로 생성 된 pdf 다운로드
제대로 작동하지만 연결이 제대로 설정되었지만받은 Content-Length가 -1이므로 파일이 다운로드되지 않습니다. 무엇이 문제 일 수 있습니까? 난 그냥 DownloadManager 내가 필요한 쿠키를 구성 할 수 있다는 것을 발견
public class HttpDownloadUtility extends AsyncTask<String, Integer, String> {
private static final int BUFFER_SIZE = 4096;
/**
* Downloads a file from a URL
* @param fileURL HTTP URL of the file to be downloaded
* @param saveDir path of the directory to save the file
* @throws IOException
*/
public String downloadFile(String fileURL, String saveDir) throws IOException {
String fileName = "";
URL url = new URL(fileURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestProperty("Cookie", android.webkit.CookieManager.getInstance().getCookie("http://mywebsite.com"));
httpConn.connect();
int responseCode = httpConn.getResponseCode();
// always check HTTP response code first
if (responseCode == HttpURLConnection.HTTP_OK) {
String disposition = httpConn.getHeaderField("Content-Disposition");
String contentType = httpConn.getContentType();
int contentLength = httpConn.getContentLength();
if (disposition != null) {
// extracts file name from header field
int index = disposition.indexOf("filename=");
if (index > 0) {
fileName = disposition.substring(index + 10,
disposition.length() - 1);
}
} else {
// extracts file name from URL
fileName = fileURL.substring(fileURL.lastIndexOf("/") + 1,
fileURL.length());
}
System.out.println(url.toString());
System.out.println("Content-Type = " + contentType);
System.out.println("Content-Disposition = " + disposition);
System.out.println("Content-Length = " + contentLength);
System.out.println("fileName = " + fileName);
// opens input stream from the HTTP connection
InputStream inputStream = httpConn.getInputStream();
String saveFilePath = saveDir + File.separator + fileName;
// opens an output stream to save into file
FileOutputStream outputStream = new FileOutputStream(saveFilePath);
int bytesRead = -1;
byte[] buffer = new byte[BUFFER_SIZE];
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
System.out.println("File downloaded");
} else {
System.out.println("No file to download. Server replied HTTP code: " + responseCode);
}
httpConn.disconnect();
return fileName;
}
@Override
protected String doInBackground(String... url) {
String downloadedFile = "";
try{
downloadedFile = downloadFile(url[0], Environment.DIRECTORY_DOWNLOADS);
}catch(Exception e){
System.out.println(e.toString());
}
return downloadedFile;
}
}