none
エンコードされたURLからダウンロードできない RRS feed

  • 質問

  • はじめまして。このフォーラムを初めて使用したいと思います。

    宜しくお願いします。

     

    今回の質問は、タイトルにも書いていますようにエンコードされたURLがダウンロードできない問題を解決してほしいことです。

    エンコードされたというのは、CMS(Wikiなど)の画像アドレスなどを指しています。

    (例 : http://img.maplesonar.com/wiki/?plugin=ref&page=%E6%9C%88%E6%A7%98&src=%E6%9C%88%E6%A7%98.png)

     

    私の作ったソフトでのエラーですが、

    「http://img.maplesonar.com/wiki/?plugin=ref&page=月様&src=月様.png 詳細 : パスに無効な文字が含まれています。

    WebClient 要求で例外が発生しました。」表示されます。

    エラーですが、

    e.UserState & " 詳細 : " & e.Error.InnerException.Message & vbCrLf & e.Error.Message & " " & e.Cancelled
    

    のようにプログラムしています。

     

    ダウンロードするコードは、

     

    Dim Url as string = <span style="font-family:Verdana,Arial,Helvetica,sans-serif; white-space:normal">http://img.maplesonar.com/wiki/?plugin=ref&page=%E6%9C%88%E6%A7%98&src=%E6%9C%88%E6%A7%98.png
    
    Dim SavePath As string = My.Application.Info.DirectoryPath 
    
    wc.DownloadFileAsync(New Uri(Url), Path.Combine(SavePath, Path.GetFileName(Uri)), Uri)
    

    です。

     

    解決策やヒントなどを教えていただけませんか?

    どうぞ宜しくお願いします。

    2011年2月22日 8:46

回答

  • totojoさん、ご指摘有難うございます。

     

    確認してみましたところ、おっしゃるとおり使えない文字で保存するようになっていました。

    厳密には、URLのディレクトリの最後から拡張子までです。(例では、?plugin=ref&page=月様&src=月様.png

    ここを変えてトライしてみたところできました!やはり、ファイルの問題だったんですね。

    思いつきませんでした。

     

    今のところ、これを代理として使おうと思っています。

     

    みなさま、有難うございました。次回も宜しくお願いします。

     

    2011年2月24日 9:15

すべての返信

  • 環境などを明示してください。

    Windows 7 + VS2008 で該当のコードの内、Path.GetFileName 近辺にある Uri という変数 2 箇所を Url に置き換えて実行したところ、特に例外は発生しませんでした。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年2月22日 15:10
    モデレータ
  • すみません。忘れていました。

     

    Windows Vista SP2

    VisualBasic2010 Express です。

     

    あと、ここのコード挿入が下手なようです。なんか、spanなんかが入っているし;

     

            Dim wc As New WebClient
    
            Dim Url As String = "http://img.maplesonar.com/wiki/?plugin=ref&page=%E6%9C%88%E6%A7%98&src=%E6%9C%88%E6%A7%98.png"
    
            Dim SavePath As String = My.Application.Info.DirectoryPath
    
            wc.DownloadFileAsync(New Uri(Url), Path.Combine(SavePath, Path.GetFileName(Url)), Url)
    

    指摘されたところを変えてやってみましたが、ダウンロードできませんでした。

    メッセージも「パスに無効な文字が含まれています。」と変わりませんでした。

    自分の予想ですが、URLがエンコードされているからではないでしょうか。静的なURLだとダウンロードできるので。

    しかし、デコードしてみてもダウンロードはできませんでした。

    http://img.maplesonar.com/wiki/?plugin=ref&page=%E6%9C%88%E6%A7%98&src=%E6%9C%88%E6%A7%98.png

    http://img.maplesonar.com/wiki/?plugin=ref&page=月様&src=月様.png

    なので予想は外れてしまいました。

     

    VB(WebClient)では不可能なのでしょうか。どうかお力をお貸しください。

     

    2011年2月23日 9:29
  • URL の問題ではなくて、保存する方のファイル名の問題だと思います。

     Path.Combine(SavePath, Path.GetFileName(Url))

    だと、どのようなファイル名を生成するでしょうか?
    デバッガで確認してみてください。すごいファイル名になっていると思います。
    2011年2月23日 10:13
  • totojoさん、ご指摘有難うございます。

     

    確認してみましたところ、おっしゃるとおり使えない文字で保存するようになっていました。

    厳密には、URLのディレクトリの最後から拡張子までです。(例では、?plugin=ref&page=月様&src=月様.png

    ここを変えてトライしてみたところできました!やはり、ファイルの問題だったんですね。

    思いつきませんでした。

     

    今のところ、これを代理として使おうと思っています。

     

    みなさま、有難うございました。次回も宜しくお願いします。

     

    2011年2月24日 9:15