2008年11月1日土曜日

javaでファイルダウンロード

Javaでファイルダウンロードを行ってみたが、期待する動作にならない。

/*
ItemServiceクラスのfindItems()メソッドを呼び出して、ItemのリストitemListを得る。
そのリストの値を一つずつ読み込んで、toCSV()メソッドでCSV形式にしてからファイルに保存したい。
firefox2.0.0.17ではファイルに保存できる。
IE7ではブラウザにファイルの内容が書き出されてしまう。なぜ?
*/

public class ItemDownloadServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}

@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}
request.setCharacterEncoding("Windows-31J");
response.setContentType("application/octet-stream");
String downloadFileName = "itemData.csv";
response.setHeader("Content-Disposition", "attachement:filename="
+ downloadFileName);

OutputStream os = null;
OutputStreamWriter osw = null;
BufferedWriter writer = null;

os = response.getOutputStream();
osw = new OutputStreamWriter(os);
writer = new BufferedWriter(osw);

try {
List itemList = (List) new ItemService().findItems();
for (Item item : itemList) {
writer.write(toCSV(item));
}
writer.flush();
} catch (SQLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (NamingException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (NotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} finally {
if (os != null) {
os.close();
}
if (osw != null) {
osw.close();
}
}

0 件のコメント: