C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: http経由で取得する画像を表示できない


(過去ログ 127 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■75360 / inTopicNo.1)  http経由で取得する画像を表示できない
  
□投稿者/ Er&#299;nyes (1回)-(2015/03/18(Wed) 18:17:19)

分類:[ASP.NET (C#)] 

元々Windows 2003 R2で動作していたASP.NETプログラム(ランダムにtiff形式の画像を表示するプログラム)を
Microsoft Azure上で動作できるよう修正しています。

動作環境は以下の通りです。

Windows 2003 R2:
 ASP.NET 2.0
 .net Framework 3.5
 MSSQL 2008

Azure
 WEBSITES (.net 3.5)
 SQLデータベース Webエディション
 ストレージ

問題ですが、Windows 2003 R2では上手く動作していた画像表示プログラムがWindows Azureでは上手くいきません。
正しくは、Windows 2003 R2ではローカルディレクトリに設置していた画像ファイルを、AzureではAzureのストレージに置き、
Web.configを以下のように変更したら表示されなくなりました。

変更前:
<appSettings>
   <add key="Documentspath" value="D:\Websites\images\" />
</appSettings>

変更後:
<appSettings>
   <add key="Documentspath" value="https://mywebsite.blob.core.windows.net/images/" />
</appSettings>

ストレージのURLに直にアクセスすると、画像ファイルが表示されるので、ストレージ上にファイルは存在します。
また、WEBSITES上にディレクトリを作成し画像ファイルを置き、Web.configを以下のように設定しても
画像が表示されるので、http経由だと何かがまずくて画像表示されないのでは?と考えています。

<appSettings>
   <add key="Documentspath" value="D:\home\site\wwwroot\images\" />
</appSettings>

コード上では、ファイルパスは以下のように取得しています。

String img = System.Configuration.ConfigurationManager.AppSettings["Documentspath"].ToString();

ここでハマってしまい、2日ほど考えていますが上手くいかないので、ご教示お願いします。

引用返信 編集キー/
■75361 / inTopicNo.2)  Re[1]: http経由で取得する画像を表示できない
□投稿者/ WebSurfer (528回)-(2015/03/18(Wed) 18:30:26)
No75360 (Er&#299;nyes さん) に返信

質問に書いてないところ(即ち、回答者が知りえないところ)に問題がありそうな
気がするのですが・・・

> 問題ですが、Windows 2003 R2では上手く動作していた画像表示プログラムがWindows
> Azureでは上手くいきません。

その「画像表示プログラム」というのは具体的に何ですか? HTTP ハンドラとかで
はないのですか?

であれば、そのあたりをきちんと書いてくれないとなんとも回答しようがないので
すが。
引用返信 編集キー/
■75363 / inTopicNo.3)  Re[2]: http経由で取得する画像を表示できない
□投稿者/ Erinyes (1回)-(2015/03/19(Thu) 00:06:01)
Erinyes さんの Web サイト
WebSurferさん

レスありがとうございます。
画像表示プログラムですが、以下のようなソースコードになります。

https://github.com/s1000honda/asp_sampleNo75361 (WebSurfer さん) に返信
> ■No75360 (Er&#299;nyes さん) に返信
> 
> 質問に書いてないところ(即ち、回答者が知りえないところ)に問題がありそうな
> 気がするのですが・・・
> 
>>問題ですが、Windows 2003 R2では上手く動作していた画像表示プログラムがWindows 
>>Azureでは上手くいきません。
> 
> その「画像表示プログラム」というのは具体的に何ですか? HTTP ハンドラとかで
> はないのですか?
> 
> であれば、そのあたりをきちんと書いてくれないとなんとも回答しようがないので
> すが。

引用返信 編集キー/
■75378 / inTopicNo.4)  Re[3]: http経由で取得する画像を表示できない
□投稿者/ WebSurfer (529回)-(2015/03/19(Thu) 12:22:59)
No75363 (Erinyes さん) に返信

Er&#299;nyes さん = Erinyes さんでいいのでしょうか?

> 画像表示プログラムですが、以下のようなソースコードになります。
> 
> https://github.com/s1000honda/asp_sample

質問者さんの方でもっと切り分けできると思うのですが、やっていただけないので
しょうか?

ざっと見て気になった点のみコメントしておきます。

appSetting が https://mywebsite.blob.core.windows.net/images/ ではダメで、
D:\home\site\wwwroot\images\ では OK ということですと、その結果に辻褄が合
うのは以下の部分です。

protected String getimage()
{
    try
    {
        String img = "test.tif";
        String img2 = System.Configuration.ConfigurationManager.AppSettings["Documentspath"].ToString() + img;
 
        if (File.Exists(img2))
        {
            return img;
        }
        else
        {
            return "0";
            Response.Write("<script>alert('" + img2 + "');</script>");
        }

    }
    catch (Exception ex)
    {
        return "0";
    }
}

File.Exists の引数は仮想パスでなくて物理パスでないとダメです。

仮想パスから物理パスを取得するには HttpServerUtility.MapPath メソッドが
利用できます。

他にも多々問題がありそうな感じなので、上記はハズレ(上記の点だけ直しても、
他にも問題があって動かないかもしれないという意味)かもしれませんが、まず
はお試しください。

これ以上は、質問者さんの方でもっと切り分けして問題の箇所を特定していただ
いてからでないと、自分は対応できそうもありません。切り分けをお願いします。

引用返信 編集キー/
■75380 / inTopicNo.5)  Re[4]: http経由で取得する画像を表示できない
□投稿者/ 魔界の仮面弁士 (253回)-(2015/03/19(Thu) 12:51:23)
No75378 (WebSurfer さん) に返信
> File.Exists の引数は仮想パスでなくて物理パスでないとダメです。
> 仮想パスから物理パスを取得するには HttpServerUtility.MapPath メソッドが
> 利用できます。

Azure 方面は不勉強(そもそも ASP.NET 自体が専門外)なので、外しているかもしれませんが、
Azure だと Server.MapPath が拒否されると耳にしたことがあります。

ファイルシステムへのアクセスが必要な場合は、RoleEnvironment.GetLocalResource で
ストレージ サービス なり ローカル ストレージ なりを得る必要があるとか何とか。


# Azure 開発やったことがないので、間違ってるかも。
引用返信 編集キー/
■75381 / inTopicNo.6)  Re[5]: http経由で取得する画像を表示できない
□投稿者/ WebSurfer (530回)-(2015/03/19(Thu) 13:07:02)
No75380 (魔界の仮面弁士 さん) に返信

フォローをありがとうございます。

> Azure 方面は不勉強(そもそも ASP.NET 自体が専門外)なので、外しているかもしれませんが、
> Azure だと Server.MapPath が拒否されると耳にしたことがあります。

自分は Azure は触ったこともないのですが、ググってみると、

Server.MapPath Access is denied On Azure
http://stackoverflow.com/questions/20783173/server-mappath-access-is-denied-on-azure

というような記事が見つかりますね。


Erinyes さん>

上記の通り MapPath メソッドは使えないかもしれません。その場合は以前と同様に直接物理パス
を使わざるを得ないようです。
引用返信 編集キー/
■75382 / inTopicNo.7)  Re[6]: http経由で取得する画像を表示できない
□投稿者/ PANG2 (74回)-(2015/03/19(Thu) 13:58:05)
> 元々Windows 2003 R2で動作していたASP.NETプログラム(ランダムにtiff形式の画像を表示するプログラム)
> <add key="Documentspath" value="D:\Websites\images\" />

ローカルディレクトリに対応した設計になっていたが、URL指定に対応していなかったということでしょう。
Azureは関係ない話です。


> Default.aspx.cs
> if (File.Exists(img2))
トル

> Default.aspx
> document.getElementById("embed1").src = 'viewer.ashx?FileName=' + img_filename;

document.getElementById("embed1").src = img_filename;

で動きそうな。

引用返信 編集キー/
■75389 / inTopicNo.8)  Re[6]: http経由で取得する画像を表示できない
□投稿者/ Erinyes (2回)-(2015/03/19(Thu) 16:44:32)
WebSurferさん、魔界の仮面弁士さん、

レスありがとうございます。
HNですが、Erinyesでお願いします。(最初に打った文字だと文字化けしてしまいました。)

切り分けをするため、処理を以下のようにgetimage()関数を呼ばずに簡略化しました。

----------------------------Display.aspx.cs----------------------------

namespace DisplayImages
{
    public partial class _Default : System.Web.UI.Page
    {
        private Random RandomNo = new Random();

        protected void Page_Load(object sender, EventArgs e)
        {
            String rnumber = this.RandomNo.Next().ToString();
            String img = "test.tif";

            ScriptManager.RegisterStartupScript((Page)this, typeof(string), rnumber, "javascript:setsrc('" + img + "');", true);
        }

    }
}

----------------------------Display.aspx.cs----------------------------

この状態でWeb.configに以下の3パターンを設定し、画像が表示されるか試してみました。
それぞれ、imagesの中にはtest.tifが置かれています。

appSettingに以下を設定

ファイルパス(D:\home\site\wwwroot\images\)
Azureストレージ (https://mywebsite.blob.core.windows.net/images/)
Webスペース (http://mywebsite.azurewebsites.net/images/)

結果として、
ファイルパス 表示可
Azureストレージ 表示不可
Webスペース 表示不可

となり、Azureストレージに置いたファイル関係なく、httpでファイルを指定すると
画像が表示されていないようです。
また、tiff以外の画像ファイル(JPEG)で試しても同じ結果になりました。
// viewer.ashx内のcontext.Response.ContentTypeをimage/jpgに変更。

引用返信 編集キー/
■75391 / inTopicNo.9)  Re[7]: http経由で取得する画像を表示できない
□投稿者/ WebSurfer (531回)-(2015/03/19(Thu) 17:25:06)
No75389 (Erinyes さん) に返信

切り分けの仕方がちょっと足りないかと・・・

HTTP ハンドラとか JavaScript のコードとかも疑ってみて切り分けできない
でしょうか?

最初の質問の話、

> ストレージのURLに直にアクセスすると、画像ファイルが表示されるので、

というのは、

> ファイルパス(D:\home\site\wwwroot\images\)
> Azureストレージ (https://mywebsite.blob.core.windows.net/images/)
> Webスペース (http://mywebsite.azurewebsites.net/images/)

の「Azureストレージ」の URL + ファイル名を直接ブラウザのアドレスバーに
打ち込むとブラウザの画面に目的の画像表示されるということすよね?

そうであれば HTTP 通信は問題なくて、ダウンロードするのに使っているプロ
グラムが怪しいということになります。なので、そのあたりに注目して切り分
けていったらいかがですか?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -