- PR -

ASP.NETにて画像ファイル取得時にファイル名にスペースがあると取得できない

投稿者投稿内容
kkk
常連さん
会議室デビュー日: 2004/09/17
投稿数: 33
投稿日時: 2005-07-26 17:36
件名について、困っています。何かよい案がありましたら教えてください。
以下に詳細を示します。

ASP.NETでつくったWebアプリで、クライアントに画面表示時に、イメージファイルを表示したいのですが、このファイル名にスペースがあると取得できません。取得できない理由は、IEにてスペースを%20に変換してイメージをGetしにいくため、取得できていないようです。
ファイル名は任意であり、いろいろな文字が入力可能となっています。

ファイル名入力時にチェックすることも可能ですが、スペース以外にも多くの不可文字があるようで、どういった対処が適切か悩んでいます。
よい解決策がありましたら教えてください。


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-07-26 17:41
URI エンコードしてもダメでしょうか?



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Moo
大ベテラン
会議室デビュー日: 2004/04/12
投稿数: 118
お住まい・勤務地: 地球・港
投稿日時: 2005-07-26 17:56
'これでどうでしょうか?
Dim strURL As String = Server.URLEncode("若乃花 優勝.jpg")
_________________
ASP/ASP.NETだいすき。 ASP++ by Moo http://moo-asp.net/
日記は ほぼ毎日更新中 http://d.hatena.ne.jp/aspx/
kkk
常連さん
会議室デビュー日: 2004/09/17
投稿数: 33
投稿日時: 2005-07-26 18:46
お疲れ様です。
詳細なご指摘ありがとうございます。

Server.UrlEncordにて、
うまくいった点もありますが、以下のように数点うまくいかない点があります。
・「コピー 〜 無題.bmp」で試したところ、うまくいかない(GETで404エラー)
・上記画像はイメージボタンのイメージなのですが、そのイメージボタンをクリックすると、該当画像をGetして、別ウインドウに表示するという仕様ですが、ウインドウがあがらない。(JSエラーになっている)

上記について、何か気になる点などありましたら、ご指摘お願いいたします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-07-26 19:17
ん〜・・もしかして'〜'があると駄目と言う話ですか?
だとしたらUnicodeのコード変換テーブル関連の話かも。Microsoftの変換テーブルの実装が各社まちまちなのが原因です。どうやって解決するかは何処でUnicode変換がかかっているのかはっきりしないと難しいかと。

[ メッセージ編集済み 編集者: 甕星 編集日時 2005-07-26 19:20 ]
kkk
常連さん
会議室デビュー日: 2004/09/17
投稿数: 33
投稿日時: 2005-07-27 12:02
いろいろとご指導ありがとうございます。

〜もあやしいのですが、そもそもスペースのみでもうまくいきませんでした。
IISのログを見ると、スペースは+になりGETで404エラーになっています。
また、「** 〜 **」の場合、IISログでは完全に文字化けしています。

ひとまず、スペースのみの問題についてさぐってみます。
何か関連する情報ありましたら、申し訳ありませんがmご指導願います。
※特に、〜を使うと、UNICODE関連の問題でうまくいかないというのが?です。漢字やカナはうまくGETできています。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-07-27 12:54
kkkさん、こんにちは。

引用:

IISのログを見ると、スペースは+になりGETで404エラーになっています。


私の場合、自力でエンコードして回避しました。

【追記】
サンプル書く前に送信してしまった…。
#VBです。

コード:

Public Function EncodeFileName(ByVal FileName As String, _
ByVal Encode As System.Text.Encoding) As String
Dim Letter As String
Dim Buf As Byte()
Dim Encoded As String = String.Empty
Dim Len As Integer = FileName.Length
Dim i, ii As Integer

For i = 0 To Len - 1
Letter = _FileName.Substring(i, 1)
Buf = Encode.GetBytes(Letter)

If Buf.Length.Equals(1) Then
Select Case Buf(0)
Case &H2E, &H30 To &H39, &H41 To &H5A, &H61 To &H7A
Encoded &= Chr(Buf(0)).ToString()
Case Else
Encoded &= "%" & Buf(0).ToString("x2")
End Select
Else
For ii = 0 To Buf.Length - 1
Encoded &= "%" & Buf(ii).ToString("x2")
Next
End If
Next

Return Encoded
End Function



[ メッセージ編集済み 編集者: きくちゃん 編集日時 2005-07-27 12:59 ]
kkk
常連さん
会議室デビュー日: 2004/09/17
投稿数: 33
投稿日時: 2005-07-27 19:45
きくちゃんさん。

わざわざ、サンプルコードありがとうございました。
そのまま使わせていただき、うまくいきました。
本当にありがとうございました。

.NETのメソッドでこのようなケースが考慮されていないのも、いただけないですね。

あと、「〜」があるとうまくいかない件については、DBの文字コードの設定がまずかったためでした。

以上、みなさんありがとうございました。

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