一个下载的问题

lbl8888 2008-07-31 09:49:07
我是在页面有一个链接,一点击就打开下载对话框,选择一个保存的地方,然后从数据库取得内容写入刚才选择的地方.
我现在的问题是:
1、打开下载对话框时,不可以选择文件类型,不知道为什么
2、我想在打开下载对话框时,默认给一个名字和扩展名
3、下载完后打开是乱码
请问以上3个问题怎么解决?
...全文
93 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyyhsq2 2008-07-31
  • 打赏
  • 举报
回复
数据库用文本编码
rascalboy520 2008-07-31
  • 打赏
  • 举报
回复
学到东西,就帮顶一下!!!!!
Landor2004 2008-07-31
  • 打赏
  • 举报
回复
String fileFileName = "xxx.html";
resp.setHeader("Content-Disposition", "attachment;" + "filename=" + new String(fileFileName.getBytes(), "iso-8859-1"));
lbl8888 2008-07-31
  • 打赏
  • 举报
回复
这是点击链接选择保存后的对话框:
lbl8888 2008-07-31
  • 打赏
  • 举报
回复
感谢楼上的朋友,可不可以再详细点说下:
1、怎样在下载前让用户选择啊?我是想默认给它一个格式怎样给?
2、我不在服务器生成文件,直接写入用户选择的文件夹,怎样让它默认就是.html格式的?
3、我的程序是UTF-8编码,数据库不知道什么编码
天外流星 2008-07-31
  • 打赏
  • 举报
回复

参考:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.*;
import java.io.File;

public class L extends JFrame
{
/**
* @param args
*/
public static void main(String[] args)throws Exception
{
new ConfigFrame("保存文件");
}
}
class ConfigFrame extends JFrame
{
private static final long serialVersionUID = 1L;

public ConfigFrame(String title)
{
//设置窗口属性
final int width = 300;
final int height = 200;
final Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
final int left = (screen.width - width)/2;
final int top = (screen.height - height)/2;
this.setLocation(left, top);
this.setSize(width,height);
this.setTitle(title);

//添加组件
JPanel panel = new JPanel();
this.add(panel);
JButton b = new JButton("打开");
panel.add(b);
b.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JFileChooser chooser = new JFileChooser(".");
TxtFileFilter txtFilter = new TxtFileFilter();
JavaFileFilter javaFilter = new JavaFileFilter();
chooser.addChoosableFileFilter(txtFilter);
chooser.addChoosableFileFilter(javaFilter);

//设置默认的文件管理器。如果不设置,则最后添加的文件过滤器为默认过滤器,本例中为javaFilter
chooser.setFileFilter(txtFilter);
int rs = chooser.showSaveDialog(ConfigFrame.this);
}
});

this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

class JavaFileFilter extends FileFilter
{
public String getDescription()
{
return "*.java(java源文件)";
}

public boolean accept(File file)
{
String name = file.getName();
return name.toLowerCase().endsWith(".java");
}
}

class TxtFileFilter extends FileFilter
{
public String getDescription()
{
return "*.txt(文本文件)";
}

public boolean accept(File file)
{
String name = file.getName();
return name.toLowerCase().endsWith(".txt");
}
}

//打开和保存基本一样


xuhaiyang 2008-07-31
  • 打赏
  • 举报
回复
1.下载框当然不能选择下载文件类型,你可以在下载前让用户选择
2.可以啊,如果不在服务器生成文件的话,就和jsp文件同名,扩展就是你的content-type;如果在服务器生成文件的话,那就是你生成的文件名
3.编码方式有问题,程序和数据库统一编码就行了
ldy214 2008-07-31
  • 打赏
  • 举报
回复
学了
tradelee 2008-07-31
  • 打赏
  • 举报
回复
这个不知道你要下载的文件类型是什么.无非是pdf,xls,rtf?
那么可以看下apache poi这个开源项目lowagie项目的hssf.
String fileName = null;
response.setContentType('xls;');
fileName = "a.xls";

if (request.getHeader("User-Agent").indexOf("MSIE 5.5") != -1) {
// MS IE5.5 有要作特别处理
response.setHeader("Content-Disposition", "filename=\""
+ fileName + "\"");
} else { // 非 IE5.5 的 Header 设定方式,IE 5.5 不能加上 attachment
// 这个关键词
response.setHeader("Content-Disposition",
"attachment; filename=\"" + fileName + "\"");
}

ServletOutputStream output = response.getOutputStream();
try {
//在这里把你要写入的流write到output
} catch (IOException e) {
if (logger.isErrorEnabled()) {
logger.error("creatResourceExcelFile ", e);
}
} finally {
if (output != null) {
output.close();
}
}

} catch (Exception e) {
e.printStackTrace();
logger.error("generate excel file exception", e);
}
}
游_子 2008-07-31
  • 打赏
  • 举报
回复

ResultSet rs = daoimp.getResultSet("select * from tablename");

String nameString = "file1.html";
try {
byte abyte0[]= null;
while(rs.next())
{
String contentString = rs.getString(1);
abyte0 = contentString.getBytes();
}
// System.out.println(abyte0.length);
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + nameString);
response.getOutputStream().write(abyte0, 0, abyte0.length);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧