47

基本的に、特定のディレクトリをチェックして画像が存在するかどうかを確認するコードがあります。存在する場合は、画像のURLをImageControlに割り当てます。

if (System.IO.Directory.Exists(photosLocation))
{
    string[] files = System.IO.Directory.GetFiles(photosLocation, "*.jpg");
    if (files.Length > 0)
    {
        // TODO: return the url of the first file found;
    }
}
4

10 に答える 10

16

これは私が使用するものです:

private string MapURL(string path)
{
    string appPath = Server.MapPath("/").ToLower();
    return string.Format("/{0}", path.ToLower().Replace(appPath, "").Replace(@"\", "/"));
 }
于 2012-10-15T14:17:50.990 に答える
14

私の知る限り、あなたがやりたいことをする方法はありません。少なくとも直接ではありません。photosLocationアプリケーションへの相対パスとして保存します。例: "~/Images/"。このように、MapPath を使用して物理的な場所ResolveUrlを取得し、URL を取得できます ( の助けを借りてSystem.IO.Path):

string photosLocationPath = HttpContext.Current.Server.MapPath(photosLocation);
if (Directory.Exists(photosLocationPath))
{
    string[] files = Directory.GetFiles(photosLocationPath, "*.jpg");
    if (files.Length > 0)
    {
        string filenameRelative = photosLocation +  Path.GetFilename(files[0])   
        return Page.ResolveUrl(filenameRelative);
    }
}
于 2008-08-19T12:02:18.700 に答える
11

これらすべての回答の問題は、仮想ディレクトリが考慮されていないことです。

検討:

Site named "tempuri.com/" rooted at c:\domains\site
virtual directory "~/files" at c:\data\files
virtual directory "~/files/vip" at c:\data\VIPcust\files

そう:

Server.MapPath("~/files/vip/readme.txt") 
  = "c:\data\VIPcust\files\readme.txt"

しかし、これを行う方法はありません:

MagicResolve("c:\data\VIPcust\files\readme.txt") 
   = "http://tempuri.com/files/vip/readme.txt"

仮想ディレクトリの完全なリストを取得する方法がないためです。

于 2012-10-27T15:00:39.440 に答える
9

最小限の労力で問題を解決するように見えるため、Fredriks の回答を受け入れましたが、Request オブジェクトには ResolveUrl メソッドが含まれていないようです。これには、Page オブジェクトまたは Image コントロール オブジェクトを介してアクセスできます。

myImage.ImageUrl = Page.ResolveUrl(photoURL);
myImage.ImageUrl = myImage.ResolveUrl(photoURL);

私のように静的クラスを使用している場合の代替手段は、VirtualPathUtility を使用することです。

myImage.ImageUrl = VirtualPathUtility.ToAbsolute(photoURL);
于 2008-08-19T13:51:26.593 に答える
4

これは私のために働いた:

HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpRuntime.AppDomainAppVirtualPath + "ImageName";
于 2012-01-24T11:07:18.993 に答える
3

たぶんこれは最善の方法ではありませんが、うまくいきます。

// Here is your path
String p = photosLocation + "whatever.jpg";

// Here is the page address
String pa = Page.Request.Url.AbsoluteUri;

// Take the page name    
String pn = Page.Request.Url.LocalPath;

// Here is the server address    
String sa = pa.Replace(pn, "");

// Take the physical location of the page    
String pl = Page.Request.PhysicalPath;

// Replace the backslash with slash in your path    
pl = pl.Replace("\\", "/");    
p = p.Replace("\\", "/");

// Root path     
String rp = pl.Replace(pn, "");

// Take out same path    
String final = p.Replace(rp, "");

// So your picture's address is    
String path = sa + final;

編集:わかりました、誰かが役に立たないとマークしました。いくつかの説明: 現在のページの物理パスを取得し、サーバーとディレクトリ (c:\inetpub\whatever.com\whatever など) とページ名 (/Whatever.aspx など) の 2 つの部分に分割します。画像の物理パスにはサーバーのパスが含まれている必要があるため、それらを「差し引き」、サーバーの相対的な画像のパスのみを残します (例: \design\picture.jpg)。バックスラッシュをスラッシュに置き換えて、サーバーの URL に追加します。

于 2008-08-19T12:03:22.457 に答える
0

簡単な解決策は、URLを使用して簡単にアクセスできる一時的な場所をWebサイト内に配置し、ファイルを保存する必要があるときにファイルを物理的な場所に移動できるようにすることです。

于 2011-07-29T11:40:10.277 に答える
0

私が知る限り、これを行う単一の関数はありません (おそらくMapPathの逆を探していたのでしょうか?)。そのような機能があるかどうか知りたいです。それまでは、GetFiles によって返されたファイル名を取得し、パスを削除して、URL ルートを先頭に追加するだけでした。これは一般的に行うことができます。

于 2008-08-19T11:53:30.247 に答える
0

URL の左側の部分を取得するには:

?HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority)
"http://localhost:1714"

アプリケーション (Web) 名を取得するには:

?HttpRuntime.AppDomainAppVirtualPath
"/"

これにより、完全な URL を取得した後に相対パスを追加できます。

于 2012-11-19T11:12:07.640 に答える
-2

これはうまくいくはずだと思います。スラッシュがずれている可能性があります。それらが必要かどうかはわかりません。

string url = Request.ApplicationPath + "/" + photosLocation + "/" + files[0];
于 2008-08-19T11:55:37.997 に答える