Estoy tratando de obtener un archivo PDF a partir de:Es imposible acceder al archivo PDF como datos binarios
URL: https://domain_name/xyz/_id/download/
en la que no apunta a un archivo PDF directa y cada archivo único se descarga interpretando un campo particular < _id>.
pongo este enlace en la barra de direcciones del navegador de archivos PDF y se descarga al instante, mientras que cuando trato de buscarla por HttpsURLConnection su Content-Type está en '/ html texto' forma, mientras que debería ser en 'application/pdf'.
También traté de 'setRequestProperty' a 'application/pdf' antes de conectar, pero el archivo siempre se descarga en 'text/html'.
método que estoy usando para ello es 'GET'
1) ¿Es necesario utilizar HttpClient en lugar de HttpsURLConnection?
2) ¿Se utilizan estos tipos de enlaces para aumentar la seguridad?
3) Señale mis errores.
4) ¿Cómo puedo saber el nombre del archivo presente en el servidor?
estoy pegando a continuación los códigos principales que he implementado:
URL url = new URL(sb.toString());
//created new connection
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
//have set the request method and property
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.setRequestProperty("Content-Type", "application/pdf");
Log.e("Content Type--->", urlConnection.getContentType()+" "+ urlConnection.getResponseCode()+" "+ urlConnection.getResponseMessage()+" "+urlConnection.getHeaderField("Content-Type"));
//and connecting!
urlConnection.connect();
//setting the path where we want to save the file
//in this case, going to save it on the root directory of the
//sd card.
File SDCardRoot = Environment.getExternalStorageDirectory();
//created a new file, specifying the path, and the filename
File file = new File(SDCardRoot,"example.pdf");
if((Environment.getExternalStorageState()).equals(Environment.MEDIA_MOUNTED_READ_ONLY))
//writing the downloaded data into the file we created
FileOutputStream fileOutput = new FileOutputStream(file);
//this will be used in reading the data from the internet
InputStream inputStream = urlConnection.getInputStream();
//this is the total size of the file
int totalSize = urlConnection.getContentLength();
//variable to store total downloaded bytes
Log.e("Total File Size ---->", ""+totalSize);
int downloadedSize = 0;
//create a buffer...
byte[] buffer = new byte[1024];
int bufferLength = 0; //used to store a temporary size of the buffer
//Reading through the input buffer and write the contents to the file
while ((bufferLength = inputStream.read(buffer)) > 0) {
//add the data in the buffer to the file in the file output stream (the file on the sd card
fileOutput.write(buffer, 0, bufferLength);
//adding up the size
downloadedSize += bufferLength;
//reporting the progress:
Log.e("This much downloaded---->",""+ downloadedSize);
}
//closed the output stream
fileOutput.close();
He buscado mucho y no pude conseguir el resultado. Si es posible, por favor intente elaborar mi error ya que estoy implementando esta cosa por primera vez.
** Intentamos ir a buscar enlaces directos como pdf: http://labs.google.com/papers/bigtable-osdi06.pdf y que se descargan fácilmente, por otra parte su 'Content-Type' también fue 'application/pdf' **
Gracias.
¿Ha comprobado el tipo MIME con el que responde el servidor? –