Java 编写消息并同时发送下载文件(getWriter、getOutputStream冲突)
我看到了这个链接 这个链接呢 我试过一些东西,但至今未能成功 我的多吉特方法Java 编写消息并同时发送下载文件(getWriter、getOutputStream冲突),java,servlets,Java,Servlets,我看到了这个链接 这个链接呢 我试过一些东西,但至今未能成功 我的多吉特方法 public void doGet(HttpServletRequest req, HttpServletResponse res){ this.doPost(req,res); } 我的doPost方法: public void doPost(HttpServletRequest req, HttpServletResponse res){ ServletOutputStream sos = respon
public void doGet(HttpServletRequest req, HttpServletResponse res){
this.doPost(req,res);
}
我的doPost方法:
public void doPost(HttpServletRequest req, HttpServletResponse res){
ServletOutputStream sos = response.getOutputStream();
PrintWriter out = new PrintWriter(new OutputStreamWriter(sos, "utf-8"));
if(something happens){
out.println(string_specific_to_situation);
return;
}
else if(some other thing happens){
foo(sos,other_string_specific_to_situation);
out.println(blabla);
return;
}
else if(some thing else happens){
foo(sos,else_string);
out.println(dotdot);
return;
}
}
foo方法
public void foo(ServletOutputStream sos,String str){
int length = 0;
InputStream is =null;
is= new ByteArrayInputStream(str.getBytes("UTF-8"));
//
// Set the response and go!
//
//
response.setContentType( "application/octet-stream" );
response.setContentLength( (int)str.length() );
response.setHeader( "Content-Disposition", "attachment; filename=\"" + name + "\"" );
//
// Stream to the requester.
//
byte[] bbuf = new byte[20];
DataInputStream in = new DataInputStream(is);
while ((in != null) && ((length = in.read(bbuf)) != -1))
{
sos.write(bbuf,0,length);
}
in.close();
sos.flush();
sos.close();
return;
}
如您所见,我想让用户端下载一个文件,
我也希望能够显示一条信息
不可能吗
谢谢这当然是可能的。但是,您可能要做的第一件事是重新设计它,这样您就不会通过字符串传递整个有效负载,尤其是如果您的数据类型确实是八位字节流,而字符串将无法可靠地保存该数据类型时 我被“希望能够显示消息”-向web客户端显示消息,或在控制台上显示消息弄糊涂了?如果您还希望流式传输到控制台,当您调用
sos.write(bbuf,0,length)
时,也要立即调用System.out.write(bbuf,0,length)
(例如)-并将输出到两个位置
另一方面,如果您试图同时向web客户端发送文件和消息,则这是不可能的。您首先需要向用户发送“消息”——可能是一个文本/html响应——其中包含一个指向servlet的链接,该servlet允许用户下载文件内容。(您将看到许多网站在HTML中使用JavaScript或meta refresh标记提示浏览器尝试自动下载,立即或很快提示用户基本上单击此下载链接。)感谢回复,第二选择我想向客户端发送消息。如果我选择向用户显示下载文件的链接,我如何将字符串(下载文件内容)作为post参数传递?tuxi-不要。当他们在查看邮件后请求下载时检索或生成内容。