2012-01-11 5 views
5

In questa situazione, ho creato un file zip contenente i file dei risultati di ricerca e sto cercando di inviarlo all'utente. Ecco il pezzo di codice che sto cercando di usare.Come restituire un file zip al browser tramite la risposta OutputStream?

File[] zippable = new File[files.size()]; 
File resultFile = ZipCreator.zip(files.toArray(zippable), results); 
InputStream result = new FileInputStream(resultFile); 
IOUtils.copy(result, response.getOutputStream()); 

Tuttavia, questo al momento non funziona correttamente. Invece di restituire il file zip che ho creato, restituisce un file html. Se in seguito cambio manualmente l'estensione del file, posso vedere che i contenuti del file sono ancora i risultati di ricerca di cui ho bisogno. Quindi il problema sta nel restituire l'estensione corretta alla risposta.

Qualcuno ha qualche consiglio per questa situazione?

risposta

6

È necessario impostare l'intestazione di risposta Content-Type sul valore application/zip (o application/octet-stream, a seconda del browser di destinazione). Inoltre, potresti voler inviare intestazioni di risposta aggiuntive indicanti lo stato degli allegati e il nome del file.

+0

Penso che potrei interpretare male qui. Ho aggiunto una riga al codice, quindi ora legge 'response.setHeader (" Content-Type "," application/zip ");' Ancora nessun successo però. Questa chiamata viene effettuata appena prima della chiamata a IOUtils.copy – Bennie

+0

@Bennie: sembra buono, ma, di nuovo, c'è una certa confusione circa il tipo MIME "giusto" da utilizzare per un file ZIP, quindi potresti voler giocare con quei valori . – maerics

+0

Va bene, sembra che funzioni adesso, almeno per restituire il file. Sta facendo una cosa strana però, in cui il file si chiama "exportZipSearchResults.htm.zip". Esiste un modo integrato per modificare il nome file nella risposta? – Bennie

1

Prima di trasmettere i risultati è necessario impostare l'intestazione del tipo di contenuto su application/octet-stream. Dipende dall'implementazione di response che stai usando su come lo fai effettivamente.