0

asp.netとSQLサーバーで構築された多くの写真を表示するWebサイトがあり、写真はサーバー内のフォルダーに保存され、写真へのポインターはSQLサーバーに保存されています。iis7を使用してWindowsコンピューターでWebサイトをホストしましたが、同じコンピューターからWebサイトを表示すると、TempInternetFilesフォルダーに写真が見つかりません。Webサイトはまだオンラインではないため、別のコンピューターを使用するかどうかわからない。では、ここで何が起こっているのでしょうか。私は何か間違ったことをしていますか、それともIEはローカルホストから一時フォルダに画像をダウンロードしませんか?

4

1 に答える 1

1

サーバーに保存されている別のフォルダーから画像を表示したい場合は、次のようにします。私はかなり新しいので、私がやっていることは最も効率的または最善の方法ではないかもしれませんが、それは機能し、コードを変更して目的の結果を得る方法のアイデアを与えるかもしれません.

1) サーバー上のパスを appSettings の下の web.config に追加します。

<configuration>

  <appSettings>
    <add key="ClientContactBusinessCardImagePath" value="C:\Content\BusinessCards\" />
    <add key="SupportLogPDFPath" value="C:\Content\SupportLogPDFs\" />
    <add key="NewsAttachmentPath" value="C:\Content\NewsAttachments\" />
  </appSettings>
  <system.web>
     //etc.
  </system.web>
</configuration>

2)サーバーに保存されているフォルダーから名刺を表示する方法は次のとおりですが、プロジェクトの一部ではありません。

private void showBusinessCard(int setwidth)
{
    float fileWidth;
    float fileHeight;
    float sizeratio;
    float calculatedheight;
    int roundedheight;
    try
    {
        FileStream fstream = new FileStream(WebConfigurationManager.AppSettings["ClientContactBusinessCardImagePath"] + BusinessCardLabel.Text, FileMode.Open, FileAccess.Read, FileShare.Read);
        System.Drawing.Image image = System.Drawing.Image.FromStream(fstream);
        fstream.Dispose();
        fileWidth = image.Width;
        fileHeight = image.Height;
        sizeratio = fileHeight / fileWidth;

        calculatedheight = setwidth * sizeratio;
        roundedheight = Convert.ToInt32(calculatedheight);

        imgbusinesscard.Width = setwidth;
        imgbusinesscard.Height = roundedheight;

        imgbusinesscard.ImageUrl = "ImageHandler.ashx?img=" + BusinessCardLabel.Text;
        hlbusinesscard.NavigateUrl = "ImageHandler.ashx?img=" + BusinessCardLabel.Text;
    }
    catch
    {
        imgbusinesscard.ImageUrl = "~/images/editcontact/businesscard-noimage.png";
        imgbusinesscard.Width = 240;
        imgbusinesscard.Height = 180;
    }

3) そして、途中で呼び出されている ImageHandler は次のようになります。

public void ProcessRequest(HttpContext context)
{
    try
    {
        string imageFileName = context.Request.QueryString["img"];

        System.Drawing.Image objImage = System.Drawing.Bitmap.FromFile(Path.Combine(WebConfigurationManager.AppSettings["ClientContactBusinessCardImagePath"], imageFileName));

        if (imageFileName != null)
        {
            MemoryStream objMemoryStream = new MemoryStream();
            objImage.Save(objMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            byte[] imageContent = new byte[objMemoryStream.Length];
            objMemoryStream.Position = 0;
            objMemoryStream.Read(imageContent, 0, (int)objMemoryStream.Length);
            objMemoryStream.Dispose();
            objImage.Dispose();
            context.Response.ContentType = "image/jpeg";
            context.Response.BinaryWrite(imageContent);
        }
    }
    catch { }
}
于 2012-06-19T06:12:44.150 に答える