2016-08-08 6 views
0

いくつかの着信ファイルには、ファイルシステムで作業するときに問題の原因となるポンド記号#があり、ファイル名から生成されたURLを使用して<img>タグに再アクセスするという問題があります。ファイル名にシャープ記号( '#')をどのように処理するのですか?

var fileDir = "/foo/bar#s.png/"; 
var dirContents = fs.readdirSync(fileDir); 

document.getElementById("id1").src = encodeURIComponent(path.join('cache', fileDir, dirContents[0])) 
// %2Fcache%2Ffoo%2Fbar%23s.png%2Fbar%23s%2001.png :: Broken img 

document.getElementById("id2").src = path.join('cache', fileDir, dirContents[1]) 
// /cache/foo/bar#s.png/bar#s 02.png :: Also broken img 

私はディレクトリ名を管理しているが、最終的なファイル.png sがファイルをロードし、ユーザー次第です。これらの文字を扱うにはどうすればいいですか?

+1

明らかに、URLで使用されるファイル名には、URLハッシュとして解釈されるため、シャープ記号を使用できません。あなたは、URLをイメージに産み出させる方法を変更しなければならない、あるいはファイル名を変更する必要があります。 – adeneo

+1

ファイルシステムとURLの両方と互換性のないこれらのファイル名を与える上流プロセスを取得して、その処理を停止します。人生はそれほど複雑である必要はありません。そのため、私はまずその問題を取り除くことをお勧めします。 – jfriend00

+0

ファイルはアーカイブを抽出して作成されています。ディレクトリ名は元のファイル名に基づいており、抽出されたファイルは問題の原因となっています。 '# 'が見つかった場合、それぞれの' dirContents [i] 'ファイルの名前を変更するある種の名前変更関数を作成する必要がありますか?それは解決策かもしれないが、私はもっと簡単なことを望んでいる。 –

答えて

0

あなたがescape these charactersます:

document.getElementById("id1").src = path.join('cache', 
               ...fileDir.split("/").map(encodeURIComponent), 
               encodeURIComponent(dirContents[0])); 

しかし、あなたは画像要求を受信したときにサーバーが正常に再びそれらをデコードすることを確認する必要があります、いないすべての実装は、ファイルパスにパーセントエンコーディングをどうするかで合意。おそらくもっと良いアプローチは、最初にファイル名にこれらの文字が現れないようにすることです。

+0

ファイルを停止するのが理想的ですが、可能ではないと思います。それはスタンドアロンの「電子」アプリケーションになりそうです。ファイルを読み込んでいるときに、ファイルの名前を変更するまでプログラムが拒否すると、その内容は本当に必要以上にエンドユーザーにとって面倒です。 ありがとうございました!私はそれをうまく使います。 –

関連する問題