Cómo obtener el nombre de archivo al hacer clic en URL en la vista web

¿Cómo obtener el nombre del archivo que subimos en el servidor cuando proporcionamos vinculado para ese archivo en la página?

Lo que estoy haciendo es, estoy proporcionando datos con vínculo de archivo en webview así que cada vez que haga clic en el enlace del usuario necesita descargar desde el servidor como he descargar este archivo desde el servidor, pero el problema no es capaz de obtener su tipo exacto y el nombre utilizando DownloadManager. Quiero como este

Introduzca aquí la descripción de la imagen

Ver en arriba he dado el enlace para mi archivo en test_androt y cuando hago clic en le dará el dailog con la opción de tener el nombre del archivo, no sé cómo lograr este nombre de archivo cuando el usuario haga clic en el enlace URL WebView.

Editar Desafortunadamente olvidé mencionar que mi URL se ve así

misc/dnload.php?t1=MzQ0MDA=&t2=MTY5NTUz&t3=MTY5NTUzMTMwMjEyMDNfcGhhcm1hY3kga2V5IGluZm8ucG5n&t4=MTMwMjEyMDM= 

Usted podría simplemente analizar la url y obtener el texto después de la última "/" y hacer que el nombre del archivo, o puede utilizar el siguiente

 URLUtil.guessFileName(url, contentDisposition, mimetype); 

Mostrado abajo como lo he usado en mi DownloadListener:

 //this stuff goes inside your DownloadListener @Override public void onDownloadStart(final String url, String userAgent,final String contentDisposition, final String mimetype, long contentLength) { String fileName = URLUtil.guessFileName(url, contentDisposition, mimetype); //returns a string of the name of the file THE IMPORTANT PART //proceed with download } 

Si no desea usarlo dentro de su DownloadListener, puede usarlo sin el contentDisposition o mimetype simplemente pasando 'null' en cada parámetro, excepto la url (pasar la url) también.

EDIT: Esto sólo funciona si tiene una url con un nombre de archivo incrustado en él. Vea la respuesta de Pratik arriba si usted está buscando una manera más infalible.

Tengo la respuesta gracias a Raghunandan por sugerencia.

Aquí necesito una llamada extra para obtener la información de cabecera del archivo de descarga. En la sección de encabezado obtuve el nombre del archivo.

También encontré este nombre de archivo de la URL que no contiene el sufijo de nombre de archivo a través del cual obtuve más detalles sobre el detalle de cabecera que podemos obtener al solicitar tiempo.

Como podemos usar este URLUtil.guessFileName(url, null, null) pero esto dará el nombre de archivo de los medios de llamada para mi caso tengo url como este

 misc/dnload.php?t1=MzQ0MDA=&t2=MTY5NTUz&t3=MTY5NTUzMTMwMjEyMDNfcGhhcm1hY3kga2V5IGluZm8ucG5n&t4=MTMwMjEyMDM= 

Por lo que desde el enlace anterior esto extraerá el dnload.php como nombre de archivo no es el nombre del archivo original que descargarlo acaba de crear vínculo de descarga para ese archivo.

Aquí está el código usando esto podemos obtener el nombre del archivo sólo una llamada extra para obtener la información, pero en realidad se descarga, para descargar he utilizado android inbuilt api a DownloadManager para descargar el archivo.

 Content-Disposition this is the attribute in header section through which we can get the file name as in attachment form. 

Va a devolver la información de esta manera Content-Disposition: attachment; filename="fname.ext" Content-Disposition: attachment; filename="fname.ext" por lo que ahora sólo tiene que extraer el nombre de archivo

 class GetFileInfo extends AsyncTask<String, Integer, String> { protected String doInBackground(String... urls) { URL url; String filename = null; try { url = new URL(urls[0]); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.connect(); conn.setInstanceFollowRedirects(false); String depo = conn.getHeaderField("Content-Disposition"); String depoSplit[] = depo.split("filename="); filename = depoSplit[1].replace("filename=", "").replace("\"", "").trim(); } catch (MalformedURLException e1) { e1.printStackTrace(); } catch (IOException e) { } return filename; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onPostExecute(String result) { super.onPostExecute(); // use result as file name } } 

Algunos refinamientos para la solución de Pratik.

Cambios:

1) extracción fija del nombre de archivo roto de Content-Disposition

2) interfaz de devolución de llamada añadida

Uso:

 new GetFileInfo(new GetFileInfoListener() { @Override public void onTaskCompleted(String fileName) { Log.v(TAG, "real filename is " + fileName); } }).execute(url); 

Código:

 class GetFileInfo extends AsyncTask<String, Integer, String> { public interface GetFileInfoListener { void onTaskCompleted(String result); } private final GetFileInfoListener mListener; public GetFileInfo(GetFileInfoListener listener) { mListener = listener; } protected String doInBackground(String... urls) { URL url; String filename = null; try { url = new URL(urls[0]); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.connect(); conn.setInstanceFollowRedirects(false); String depo = conn.getHeaderField("Content-Disposition"); if (depo != null) filename = depo.replaceFirst("(?i)^.*filename=\"?([^\"]+)\"?.*$", "$1"); else filename = URLUtil.guessFileName(urls[0], null, null); } catch (MalformedURLException e1) { e1.printStackTrace(); } catch (IOException e) { } return filename; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onPostExecute(String result) { super.onPostExecute(result); if (mListener != null) mListener.onTaskCompleted(result); } } 
  • Cómo configurar la cookie en el cliente androide de WebView
  • ¿Cuáles son los formatos de archivo en el directorio de caché de Android WebView (data_1, f_000001 etc.)?
  • Vista web de Android a veces no carga imágenes
  • Tuve que cargar dos datos dos veces para que WebView se actualizara en Android
  • Autenticación Monodroid WebView para SSRS
  • Textarea no envuelve texto en WebView en Android
  • Enlaces que no funcionan dentro de un WebView debido a 'X-Frame-Options' establecido en 'SAMEORIGIN'
  • Desplazamiento de Webview dentro de una vista de desplazamiento
  • Necesita ayuda con el botón de retroactiva para volver a la vista web
  • Vista web de Android con GSAP: intenta eliminar la referencia local que no sea JNI,
  • Rotación de 90 grados en la vista web de FrameLayout en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.