- PR -

ファイルダウンロード時に「HTTP 500 - 内部サーバー エラー」になります

1
投稿者投稿内容
かさこ
常連さん
会議室デビュー日: 2007/10/24
投稿数: 26
お住まい・勤務地: Hyogo
投稿日時: 2007-10-24 11:57
IIS+ASP+BASP21でWebサーバ(2003Server)からファイルをダウンロードするプログラミングをしています。

ダウンロードするファイル名に、2バイト文字やカナ文字が含まれていない場合は正常にダウンロードが終了するのですが、ファイル名に2バイト文字等が含まれている場合、上記エラーが表示されてしまいます。

また、手元のPC(http://localhost/...)では、ファイル名に2バイト文字等(下記ソースのbbbbb部分)が含まれていても正常にダウンロード(ファイル保存)できるので困っております。
(aaaaa部分は半角英数字です)

以下にソースファイル(.asp)を記載するので、解決策等をご存じの方がいらっしゃればご教授下されば幸いです。


━━━━━ file_download.asp ━━━━━
<%@ Language=VBScript %>
<%
'--- file_download.asp?dir_name=aaaaa&file_name=bbbbb.xxx ---

Dim dname
Dim fname

'dir_name = 保存先ディレクトリ名
dname = Request.QueryString("dir_name")
'file_name = ファイル名
fname = Request.QueryString("file_name")

Response.ContentType = "application/octet-stream;name=" & fname
Response.AddHeader "Content-Disposition","attachment;filename=" & fname

Set objBasp = Server.CreateObject("Basp21")
bydata = objBasp.BinaryRead(Server.MapPath("../_file/" & dname & "/" & fname))

Set objBasp = Nothing
Response.AddHeader "Content-Length", ubound(bydata) + 1
Response.BinaryWrite bydata
%>
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-10-24 14:08
ファイル名をURLエンコード。

しかし、ダウンロードファイル名に日本語を使うことはお勧めしませんね。
http://support.microsoft.com/kb/816868/
http://support.microsoft.com/kb/436616/ja
http://support.microsoft.com/kb/930938/ja
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-10-26 09:53
こういうスレッドがあったんですね。知らなかった。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17526&forum=7&2

#先人の方々に感謝しつつ。
かさこ
常連さん
会議室デビュー日: 2007/10/24
投稿数: 26
お住まい・勤務地: Hyogo
投稿日時: 2007-10-26 11:40
回答ありがとうございます。

<%
Dim dname
Dim fname
dname = Request.QueryString("dir_name")
fname = Request.QueryString("file_name")
filePath = Server.MapPath("../_file/" & dname & "/" & fname)

Set bobj = Server.CreateObject("basp21")
binData = bobj.BinaryRead(filePath)
Response.AddHeader "Content-Type", "application/vnd.ms-excel;charset=Windows-31J"
Response.AddHeader "Content-Disposition", "attachment; filename=" + fname
Response.BinaryWrite binData
Response.End
%>

試してみましたが、
 dir_name = aaa
 file_name = book1.xls
の場合はファイルダウンロードのボックスが表示され、「開く」「保存」ともに正常にできました。
でも、
 dir_name = aaa
 file_name = てすと.doc
の場合は「HTTP500エラー」表示のためボックスすら表示されませんでした。
※dir_nameは半角英数字のみです。

技術的に不可能なことなんでしょうかね…。
1

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