在GWT中将文件从服务器发送到客户端
我正在使用GWT 我必须从服务器下载一个文件到客户端 文档位于外部存储库中 客户机通过Servlet发送文档的id 在服务器端:检索使用此ID的文档:在GWT中将文件从服务器发送到客户端,gwt,servlets,gwt-rpc,gwt2,formpanel,Gwt,Servlets,Gwt Rpc,Gwt2,Formpanel,我正在使用GWT 我必须从服务器下载一个文件到客户端 文档位于外部存储库中 客户机通过Servlet发送文档的id 在服务器端:检索使用此ID的文档: Document document = (Document)session.getObject(docId); ContentStream contentStream = document.getContentStream(); ByteArrayInputStream inputStream = (ByteArrayInputStream)
Document document = (Document)session.getObject(docId);
ContentStream contentStream = document.getContentStream();
ByteArrayInputStream inputStream = (ByteArrayInputStream) contentStream.getStream();
int c;
while ((c = inputStream.read()) != -1) {
System.out.print((char) c);
}
String mime = contentStream.getMimeType();
String name = contentStream.getFileName();
InputStream strm = contentStream.getStream();
在这里我可以阅读文件
我想把这个发给客户。
如何将其设置为文件并发送回客户端?在Servlet中:
Document document =(Document)session.getObject(docId);
ContentStream contentStream = document.getContentStream();
String name = contentStream.getFileName();
response.setHeader("Content-Type", "application/octet-stream;");
response.setHeader("Content-Disposition", "attachment;filename=\"" + name + "\"");
OutputStream os = response.getOutputStream();
InputStream is =
(ByteArrayInputStream) contentStream.getStream();
BufferedInputStream buf = new BufferedInputStream(is);
int readBytes=0;
while((readBytes=buf.read())!=-1) {
os.write(readBytes);
}
os.flush();
os.close();// *important*
return;
在Servlet中:
Document document =(Document)session.getObject(docId);
ContentStream contentStream = document.getContentStream();
String name = contentStream.getFileName();
response.setHeader("Content-Type", "application/octet-stream;");
response.setHeader("Content-Disposition", "attachment;filename=\"" + name + "\"");
OutputStream os = response.getOutputStream();
InputStream is =
(ByteArrayInputStream) contentStream.getStream();
BufferedInputStream buf = new BufferedInputStream(is);
int readBytes=0;
while((readBytes=buf.read())!=-1) {
os.write(readBytes);
}
os.flush();
os.close();// *important*
return;
您可以在服务器端创建一个标准servlet(它扩展了
HttpServlet
,而不是RemoteServiceServlet
),并有机会在客户端将id作为servlet参数提交
现在,您需要在收到请求后创建excel文件并将其发送到客户端。浏览器显示自动弹出的下载对话框。
但是您应该确保设置了正确的内容类型响应头。此标题将指示浏览器它是哪种类型的文件
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String fileId = reguest.getParameter("fileId"); // value of file id from request
File file = CreatorExel.getFile(fileId); // your method to create file from helper class
// setting response headers
response.setHeader("Content-Type", getServletContext().getMimeType(file.getName()));
response.setHeader("Content-Length", file.length());
response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\"");
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
InputStream inputStream = new FileInputStream(file);
ServletOutputStream outputStream = response.getOutputStream();
input = new BufferedInputStream(fileInput);
output = new BufferedOutputStream(outputStream);
int count;
byte[] buffer = new byte[8192]; // buffer size is 512*16
while ((count = input.read(buffer)) > 0) {
output.write(buffer, 0, count);
}
} finally {
if (output != null) {
try {
output.close();
} catch (IOException ex) {
}
}
if (input != null) {
try {
input.close();
} catch (IOException ex) {
}
}
}
您可以在服务器端创建一个标准servlet(它扩展了
HttpServlet
,而不是RemoteServiceServlet
),并有机会在客户端将id作为servlet参数提交
现在,您需要在收到请求后创建excel文件并将其发送到客户端。浏览器显示自动弹出的下载对话框。
但是您应该确保设置了正确的内容类型响应头。此标题将指示浏览器它是哪种类型的文件
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String fileId = reguest.getParameter("fileId"); // value of file id from request
File file = CreatorExel.getFile(fileId); // your method to create file from helper class
// setting response headers
response.setHeader("Content-Type", getServletContext().getMimeType(file.getName()));
response.setHeader("Content-Length", file.length());
response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\"");
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
InputStream inputStream = new FileInputStream(file);
ServletOutputStream outputStream = response.getOutputStream();
input = new BufferedInputStream(fileInput);
output = new BufferedOutputStream(outputStream);
int count;
byte[] buffer = new byte[8192]; // buffer size is 512*16
while ((count = input.read(buffer)) > 0) {
output.write(buffer, 0, count);
}
} finally {
if (output != null) {
try {
output.close();
} catch (IOException ex) {
}
}
if (input != null) {
try {
input.close();
} catch (IOException ex) {
}
}
}
:从服务器下载到客户端的所有文件都是空的,但这些文件不是空的。我已经编辑了答案。现在请尝试检查您正在
contentStream.getStream()中获取的数据,这是您的代码。:What is input<代码>新的BufferedInputStream(输入)代码>对不起,输入错误:应该是“is”:字节[]buf=new BufferedInputStream(inputStream)代码>此行给我错误类型不匹配:无法从BufferedInputStream转换为byte[]将类型更改为buf BufferInputStream:从服务器到客户端的所有文件都是空的,但文件不是空的。我已编辑了答案。现在请尝试检查您正在contentStream.getStream()中获取的数据,这是您的代码。:What is input<代码>新的BufferedInputStream(输入)代码>对不起,输入错误:应该是“is”:字节[]buf=new BufferedInputStream(inputStream)代码>此行给我错误类型不匹配:无法从BufferedInputStream转换为byte[]将类型更改为buf BufferInputStream