- PR -

サーブレット、部分的GETに関する質問です。

1
投稿者投稿内容
ぴかびーわん
会議室デビュー日: 2009/02/25
投稿数: 2
投稿日時: 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/25
投稿数: 2
投稿日時: 2009-02-26 15:50
無事解決しました。お騒がせしました。
1

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