Java用输出流下载文件的时候如何直接弹出(打开)保存对话框

2024-12-16 18:08:14
推荐回答(5个)
回答1:

你好,请看下这段程序

<%
response.setCharacterEncoding("gb2312");
request.setCharacterEncoding("gb2312");

if (request.getParameter("file") != null) {
OutputStream os = null;
FileInputStream fis = null;
try {
String file = request.getParameter("file");
if (!(new File(file)).exists()) {
System.out.println("没有文件");
return;
}
System.out.println("文件名为:"+file);
os = response.getOutputStream();
response.setHeader("content-disposition", "attachment;filename=" + file);
response.setContentType("application/vnd.rn-realmedia-vbr");//此项内容随文件类型而异
byte temp[] = new byte[1000];
fis = new FileInputStream(file);
int n = 0;
while ((n = fis.read(temp)) != -1) {
os.write(temp, 0, n);
}
} catch (Exception e) {
out.print("出错");
} finally {
if (os != null)
os.close();
if (fis != null)
fis.close();
}
out.clear();
out = pageContext.pushBody();

}
%>




回答2:

写文件下载的时候的时候都是传到服务器一个请求 服务器根据请求 给你返回一个流文件 IE根据你文件头的标示 给你自动打开或者提示 一个对话框的
一般不用你去写 如果你用组件或者struts的上传下载的话 还可以自己设定浏览器是能打开的就打开(比如图片或者txt)不能打开的就显示对话框的,当然自己写代码也能实现的!(麻烦80-90行是至少的)

回答3:

  可以用JFileChooser类中的showSaveDialog方法。

  比如这个例子,打开对话框保存了一个图片。  

			JFileChooser jfc=new JFileChooser("."); 
        jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
        FileNameExtensionFilter filter1 = new FileNameExtensionFilter("*.png", "png");
        FileNameExtensionFilter filter2 = new FileNameExtensionFilter("*.jpg", "jpg");
        FileNameExtensionFilter filter3 = new FileNameExtensionFilter("*.jpeg", "jpeg");
        jfc.addChoosableFileFilter(filter1);
        jfc.addChoosableFileFilter(filter2);
        jfc.addChoosableFileFilter(filter3);
        jfc.setAcceptAllFileFilterUsed(false);
        jfc.setFileFilter(filter1);
        jfc.setSelectedFile(new File("2D_Code"));
        int returnVal = jfc.showSaveDialog(MainFrame.this);
        if(returnVal == JFileChooser.APPROVE_OPTION)
        {
         File file = jfc.getSelectedFile();
         if(file.exists())
         {
         int i = JOptionPane.showConfirmDialog(this, "File exists! Overwrite it?","Attention",JOptionPane.OK_OPTION);
         if(i != JOptionPane.OK_OPTION)
         return;
         }
         try {
ImageIO.write(image, imgType, file);
JOptionPane.showMessageDialog(this, "Successfully saved!");
} catch (IOException e1) {
JOptionPane.showMessageDialog(this, "Failed saving.");
e1.printStackTrace();
}
        }

  除了showSaveDialog方法赖保存文件外,还有showOpenDialog来打开文件对话框

  具体的请参阅JFileChooser的API

回答4:

直接在response中,把流文件写进去就可以了。

浏览器就自动弹出打开、保存了。

至于response中怎么写流,上网自己找。

回答5:

直接给各服务器上文件的连接,就会自动出另存为吧.