- - PR -
サーブレット、部分的GETに関する質問です。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2009-02-25 17:20
iアプリのダウンロード画面を作成しています。
外部からのアクセスを防ぐ為にjar,jamをWEB-INFに配置し、 クライアントがリンクを押下すると、サーブレットを呼び出し、ダウンロード処理する、というような仕組みで作業を進めています。 アプリ容量が少ない場合(50k)は成功したのですが、 多い場合(多分100k以上?)で試した場合、アプリ側からRangeヘッダ(部分的GET)が飛ばされるので、 それの対処として、下記のソースを記述しましたが、「このデータは取得できません」とエラーが出てしまいます。 下記URLを参考にさせて頂いたのですが、完全に行き詰ってしまいました。 この件、原因が分かる方、心当たりのある方、どうぞ宜しくお願いします。m(_ _)m http://youkand.cocolog-nifty.com/blog/2008/05/j2eeget_e813.html http://​www.tohoho-web.com/ex/http.htm​ 環境 TOMCAT5.5 ※参考 取得Range= bytes=1340-295128 jarファイルに2回アクセスが来ている事から、 予想では、一度目の通信で0-1339まで受信し、 二度目の通信で1340-295128までを望んでいる、という感じだと思います。 // Jarファイルのバイト配列作成 File file = new File(sc.getRealPath("/WEB-INF/Sample.jar")); byte[] b = new byte[(int) file.length()]; { BufferedInputStream bis = null; try { bis = new BufferedInputStream(new FileInputStream(file)); bis.read(b); } catch (IOException e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } bis = null; } } } // レスポンスデータを生成 boolean isRange = false; int off = 0; int len = b.length; String range = request.getHeader("Range"); if (range != null && range.length() != 0) { range = range.substring(range.indexOf("=") + 1); off = Integer.parseInt(range.substring(0, range.indexOf("-"))) + 1; len = Integer.parseInt(range.substring(range.indexOf("-") + 1)) + 1; isRange = true; } byte[] resData = new byte[len - off]; System.arraycopy(b, off, resData, 0, resData.length); // コンテントヘッダを設定 response.setContentType("application/octet-stream"); response.setContentLength(resData.length); if (isRange) { response.setHeader("Content-Range", "bytes " + (off - 1) + "-" + (len - 1) + "/" + (b.length - 1)); response.setStatus(206); } // 送信 BufferedOutputStream bos = null; try { bos = new BufferedOutputStream(response.getOutputStream()); bos.write(resData); } catch (IOException e) { e.printStackTrace(); } finally { if (bos != null) { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } bos = null; } } |
|
投稿日時: 2009-02-26 15:50
無事解決しました。お騒がせしました。
|
1