- PR -

HttpURLConnection関数を使ってますが

1
投稿者投稿内容
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-04-08 13:52
いつもお世話になっております。

インギさまの勧めで新しいスレッドに質問を書かせていただきます。


環境

Linux、tomcatです。 サーブレットで作業しています。

Excelファイルが存在するサーバーもLinuxです。
1.作りたいものは
  別のサーバー(PC本体自体が別です。)に存在しているExcelファイルを読み込んでHTMLに表示したいです。

2.みなさんのおかげでやっと書いたソースです。^^

res.setContentType("application/vnd.ms-excel; charset=Shift_JIS");

out = res.getWriter();

URL url;
HttpURLConnection urlConn;

// URL の作成
url = new URL( address );

// コネクトして、HttpURLConnection の作成
urlConn = (HttpURLConnection)url.openConnection();
urlConn.setRequestMethod("GET");

BufferedInputStream bi = new BufferedInputStream(urlConn.getInputStream());
int i = bi.available();
byte[] buf = new byte[i];
bi.read(buf);

out.println(new String(buf));
bi.close();

// ディスコネクトする
urlConn.disconnect();


3.問題点

ExcelがIEに開かれますが。。。
内容は化けます。


バイナリで読み込めばできるって話を聞いたんですが
なかなかうまくいかず。。。

ヒントお願いします。(今までもいっぱいもらいましたが −−;)






[ メッセージ編集済み 編集者: ミミ 編集日時 2004-04-08 13:54 ]

[ メッセージ編集済み 編集者: ミミ 編集日時 2004-04-09 15:04 ]
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2004-04-08 14:11
Reader で読むのを止めたまではよいのですが、せっかく読み込んだバイナリデータを String に変換したり Writer に書いちゃ元も子もないですよ。
読んだままを OutputStream に書きましょう。
あと、自分でバッファリングするなら BufferedInputStream を使う意味はありません。
あと、自分でバッファリングするならバッファサイズは8192ぐらいに固定して、available()使うのは止めましょう。
あと、Content-Type に charset の指定は無意味でしょう。この場合。

ところで、
引用:

Excelファイルが存在するサーバーもLinuxで、IISを入れました。


最近は Linux でも IIS が動くんですか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-04-08 14:11
1・レスポンスのcontent-typeの設定でResponse#setContentTypeを使う
2・HttpServletResponse#getOutputStreamでストリームを取得し
  ServletOutputStream#writeで、
  HttpURLConnectionのストリームを書き出す

で、OKだと思うのですが。
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-04-08 14:19
返答ありがとうござします。

佐々木様:最近は Linux でも IIS が動くんですか?

上司の話ではそうでしたけど。。。
今テスト環境ではIISではありませんが本番サーバーはIISって言ってました。


できました。

本当に有難うございました。


みなさんのおかげです。

これからも頑張ります。^^



[ メッセージ編集済み 編集者: ミミ 編集日時 2004-04-08 14:32 ]
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-04-08 16:36
引用:

ミミさんの書き込み (2004-04-08 14:19) より:

佐々木様:最近は Linux でも IIS が動くんですか?




絶対無理です。
Microsoft製品で、Linuxで動くものなんて・・・

もしかしたら、本番は「別のサーバ」がWindowsだったりして
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-04-08 17:41
Cluster様

引用:
絶対無理です。
Microsoft製品で、Linuxで動くものなんて・・・
もしかしたら、本番は「別のサーバ」がWindowsだったりして


かもしれません。 いつも上司は適当に言ってるので。。。T.T

結局、絶対無理ですね。
勉強になりました。
ありがとうございます。

ちなみに
1・レスポンスのcontent-typeの設定でResponse#setContentTypeを使う
2・HttpServletResponse#getOutputStreamでストリームを取得し
  ServletOutputStream#writeで、
  HttpURLConnectionのストリームを書き出す
って結構不安定です。
みなさんはそうでもないですか?私だけ?
できたりできなかったりします。 500エラーが出たりして。。。 T.T



山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-04-08 18:09
[Excelファイル(別のPC在)をHTMLページに表示したいですが ]とはまた内容が異なっているようです。
また新しいスレッドをたててはいかがでしょうか。
あと、どんなエラーがでるのか情報を書いた方が良いでしょう。500エラーといってもサーバサイドではなんらかの例外・エラーが出力されているはずですから。
1

スキルアップ/キャリアアップ(JOB@IT)