Как скачать PDF с динамического URL в веб-просмотре
URL-адрес PDF на сервере:
https://xyz.abc.com/qwer/leterpdf?Key=43,1&AppId=9520&usecaseID=195
Я хотел бы иметь два журнала. Журнал номер один записывает некоторую основную информацию. Это пользовательский журнал, потому что мне нужно фильтровать по определенным параметрам. Если журнал номер один говорит мне, что произошла ошибка, я хотел бы сохранить ссылку на более подробный журнал slg1 и открыть этот журнал. Какой уникальный идентификатор журнала SLG1 я могу использовать для отображения журнала?
1 ответ
В зависимости от технологии, которую вы используете на стороне сервера, вы можете загрузить файл, передавая ему соответствующие заголовки. Как я использую PHP в моем случае и сделать это так
$filepath = "pdfs/android.pdf";
$length = filesize($filepath);
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="android.pdf"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
header("Content-Length: ".$length);
Скачать Listener-
w.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) {
String fileName,cookie;
try {
fileName = contentDisposition.replace("inline; filename=", "");
fileName = fileName.replaceAll("\"", "");
downloadFileAsync(url, fileName);
}catch (Exception e){
}
}
});
Скачать код
private void downloadFileAsync(String url, String filename){
new AsyncTask<String, Void, String>() {
String SDCard;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection urlConnection = null;
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
int lengthOfFile = urlConnection.getContentLength();
SDCard = Environment.getExternalStorageDirectory() + File.separator + "downloads";
int k = 0;
boolean file_exists;
String finalValue = params[1];
do {
if (k > 0) {
if (params[1].length() > 0) {
String s = params[1].substring(0, params[1].lastIndexOf("."));
String extension = params[1].replace(s, "");
finalValue = s + "(" + k + ")" + extension;
} else {
String fileName = params[0].substring(params[0].lastIndexOf('/') + 1);
String s = fileName.substring(0, fileName.lastIndexOf("."));
String extension = fileName.replace(s, "");
finalValue = s + "(" + k + ")" + extension;
}
}
File fileIn = new File(SDCard, finalValue);
file_exists = fileIn.exists();
k++;
} while (file_exists);
File file = new File(SDCard, finalValue);
FileOutputStream fileOutput = null;
fileOutput = new FileOutputStream(file, true);
InputStream inputStream = null;
inputStream = urlConnection.getInputStream();
byte[] buffer = new byte[1024];
int count;
long total = 0;
while ((count = inputStream.read(buffer)) != -1) {
total += count;
//publishProgress(""+(int)((total*100)/lengthOfFile));
fileOutput.write(buffer, 0, count);
}
fileOutput.flush();
fileOutput.close();
inputStream.close();
}catch (MalformedURLException e){
Log.d(AppConfig.APP_TAG, e.getMessage());
} catch (ProtocolException e){
Log.d(AppConfig.APP_TAG, e.getMessage());
} catch (FileNotFoundException e){
Log.d(AppConfig.APP_TAG, e.getMessage());
} catch (IOException e){
Log.d(AppConfig.APP_TAG, e.getMessage());
} catch (Exception e){
Log.d(AppConfig.APP_TAG, e.getMessage());
}
return params[1];
}
@Override
protected void onPostExecute(final String result) {
}
}.execute(url, filename);
}