バックスラッシュで区切られたパスをスラッシュで区切られたパスに変換したいです。
JavaScriptとHTMLで画像のローカルパスを取得してそのローカルパスをもとに画像を表示させたいのですが、
取得したパスはバックスラッシュでディレクトリーを区切ってあります。
html
1"C:\Users\name\Desktop\picture.png"
html の background = "画像のパス" で画像を表示する方法ならバックスラッシュのローカルパスでも表示可能なのですが
css の background-image や canvas で画像を表示する際は ローカルファイルの場合 file:/// をパスに加えたうえ、
バックスラッシュをスラッシュにしたパスじゃないと表示されないようです。
そのためバックスラッシュのパスをスラッシュに変換したいです。
ほかのteratailの記事などで、.replace() を使って変換している例を見つけたのですが、
https://teratail.com/questions/119708
上の記事の場合
html
1var path = "fuga\hoge\pily.png"
などの二重のバックスラッシュで区切ってあるので
html
1var replaced = path.replace(/\/g, "/");
で変換できますが、変換したいパスは一重のバックスラッシュで区切ってあるので正しく変換できません。
html
1var replaced = path.replace(//g, "/");
このコードだとバックスラッシュが普通の文字列としてではなくエスケープシーケンス?というものとして扱われるらしくエラーになってしまいます。
どうすればバックスラッシュで区切られたパスをJavascriptでスラッシュに変換できるでしょうか?
またバックスラッシュのローカルパスでも html の background="画像のパス" では使用できるため <body> などの要素に
JavaScriptからbackground="画像のパス"を追加したりできないでしょうか?
パスを取得するコード
以下のサイトのコードです。
http://javascript.pc-users.net/browser/form/file.html
取得したパスがバックスラッシュのローカルパスのため
net::ERR_FILE_NOT_FOUND になってしまいます。
html
1<html> 2 <head> 3 <title>JavaScript file</title> 4 <script type="text/javascript"> 5 function dispFile(){ 6 var filePath = document.fm.upFile.value; 7 console.log(filePath) 8 alert('選択したファイルのパスは' + filePath + 'です' ); 9 let body = document.getElementById("bodyId") 10 body.setAttribute("style","background-image:url('file:///"+filePath+"')") 11 12 } 13 </script> 14 </head> 15 <body id = "bodyId"> 16 <form name="fm"> 17 選択したファイルのパスを表示<br> 18 <input type="file" name="upFile" value="upFile"><br> 19 <input type="button" value="確認" onclick="dispFile()"> 20 </form> 21 </body> 22 </html>
回答よろしくお願いします!
回答4件
あなたの回答
tips
プレビュー