Ho una pagina GWT in cui l'utente immette i dati (data di inizio, data di fine, ecc.), Quindi questi dati vengono inviati al server tramite chiamata RPC. Sul server voglio generare un report Excel con POI e lasciare che l'utente salvi quel file sul proprio computer locale.Scarica file dinamico con GWT
Questo è il mio codice di prova per lo streaming di file indietro al client, ma per qualche motivo penso che non sa come per lo streaming di file al client quando sto usando RPC:
public class ReportsServiceImpl extends RemoteServiceServlet implements ReportsService {
public String myMethod(String s) {
File f = new File("/excelTestFile.xls");
String filename = f.getName();
int length = 0;
try {
HttpServletResponse resp = getThreadLocalResponse();
ServletOutputStream op = resp.getOutputStream();
ServletContext context = getServletConfig().getServletContext();
resp.setContentType("application/octet-stream");
resp.setContentLength((int) f.length());
resp.setHeader("Content-Disposition", "attachment; filename*=\"utf-8''" + filename + "");
byte[] bbuf = new byte[1024];
DataInputStream in = new DataInputStream(new FileInputStream(f));
while ((in != null) && ((length = in.read(bbuf)) != -1)) {
op.write(bbuf, 0, length);
}
in.close();
op.flush();
op.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
return "Server says: " + filename;
}
}
ho leggere da qualche parte su internet che non si può fare file stream con RPC e devo usare Servlet per questo. C'è qualche esempio su come usare Servlet e come chiamare quel servlet da ReportsServiceImpl. Devo davvero creare un servlet o è possibile eseguire lo streaming con il mio RPC?
Si prega di elaborare il problema in modo più dettagliato. "non sa" non è realmente descrittivo. Cosa succede esattamente? Cosa succede esattamente no? – BalusC
La risposta di @sri ha senso. Ora è il mio turno di postare alcuni commenti: 1) 'DataInputStream' è superfluo. Basta usare direttamente 'FileInputStream'. Dopotutto * solo * serve il metodo 'read()' definito nella classe 'InputStream'. 2) Il controllo 'in! = Null' è anche superfluo dato che è ** mai ** null (ne hai creato uno nuovo usando' new', che non può mai essere nullo). 3) L'intestazione 'Content-Disposition' sembra malformata nella parte' filename'. Per avere qualche idea su come utilizzare il file * basic * che serve, potresti trovare [questo articolo] (http://balusc.blogspot.com/2007/07/fileservlet.html) utile. In bocca al lupo. – BalusC