NO entiendo mucho tu pregunta en este caso faltaría ver como tienes mapeado la
BD y como almacenas, pero en realidad cuando guardas el fichero como un objeto serializable
en la BD este se almacena como un array de Bytes así que no se almacena el
nombre del archivo, podrías a mi ver tener dos soluciones, una poner en el
objeto serializable delante también en bytes el
nombre del archivo, o poner un campo en la BD en la misma tabla que lo contenga
así cuando lo muestres o permitas descargarlo le pones ese nombre en un header,
algo como esto serian los dos casos:
1-
File aSelected = new
File("/ruta/del/fichero/a/subir");
//Inicio de cosas insertadas
String nameToPutInBD = aSelected.getName();
byte[] bName = nameToPutInBD.getBytes();
long nameLength =
bName.length;
byte[] text = (“”+nameLength).getBytes();
//Fin de cosas insertadas
long length=
aSelected.length();
InputStream is = new FileInputStream(aSelected);
byte[] data1 = new
byte[(int)length + (int) nameLength + text.length];//nuevo
//Inicio de cosas insertadas
for(int i = 0 ; i< text.length;i++){
data1 = text;
}
for(int i = 0,j= text.length ; i< nameLength;i++,j++){
data1 = bName;
}
//Fin de cosas insertadas
int offset = nameLength + text.length;//nuevo
int numRead = 0;
while (offset < data1.length
&& (numRead=is.read(data1, offset, data1.length-offset)) >= 0) {
offset += numRead;
}
if (offset < data1.length) {
throw new IOException("No se pudo completar la lectura del fichero
"+aSelected.getName());
}
//En este punto asignas la variable data1 al campo serializable (el que
mapea con blob) de tu objeto a persistir.
is.close();
2-
File aSelected = new
File("/ruta/del/fichero/a/subir");
//Inicio
de cosas insertadas
String nameToPutInBD = aSelected.getName();
//Fin
de cosas insertadas
long length= aSelected.length();
InputStream is = new FileInputStream(aSelected);
byte[] data1
= new byte[(int)length];
int offset
= 0;
int numRead
= 0;
while (offset
< data1.length
&& (numRead=is.read(data1, offset, data1.length-offset)) >= 0) {
offset += numRead;
}
if (offset < data1.length) {
throw new IOException("No se pudo completar la lectura del fichero
"+aSelected.getName());
}
//En este punto asignas la variable data1 al campo serializable (el
que mapea con blob) de tu objeto a persistir.
//ademas
asigna el valor del nombre de tu archivo a el campo correspondiente
is.close();
//Inicio
de cosas insertadas
//Aquí te va el header que debes pasar en el
momento de descargar el fichero al usuario, en el caso de mostrar el nombre
simplemente muestras el del campo que salvaste.
response.addHeader("Content-Disposition",modo + ";
filename="nombreDelFichero.extensión");
la variable modo puede
tomar dos valores [inline, attachment] para
que se intente abrir el fichero en el navegador o directamente se le solicite
la descarga al usuario.
//Fin de cosas insertadas
Nada de esto fue escrito en un IDE así que pueden haber algunos errores pero básicamente es esta la idea, en la primera opción debes recordar que para usar el archivo primero tienes que coger el primer entero que te dice el tamaño del nombre lo coge y lo comviertes y el resto es el fichero, igual te recomiendo la segunda opción, pero eso ya es tu elección.