Как я преобразовываю путь к файлу к URL в ASP.NET

В моем случае я делал это:

double a = (double) (MAX_BANDWIDTH_SHARED_MB/(qCount+1));

Вместо «правильного»:

double a = (double)MAX_BANDWIDTH_SHARED_MB/(qCount+1);

Обратите внимание на круглые скобки!

46
задан Hooked 6 March 2015 в 04:32
поделиться

5 ответов

Насколько я знаю, нет никакого метода, чтобы сделать то, что Вы хотите; по крайней мере, не непосредственно. Я сохранил бы 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);
    }
}
13
ответ дан Tas 26 November 2019 в 20:39
поделиться

Я принял ответ Fredriks, как это, кажется, решает проблему с наименьшим количеством усилия однако, объект Запроса, кажется, не содержит метод ResolveUrl. К этому можно получить доступ через Объект страницы или объект управления Изображения:

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

альтернатива при использовании статического класса, как я, должна использовать VirtualPathUtility:

myImage.ImageUrl = VirtualPathUtility.ToAbsolute(photoURL);
8
ответ дан Andy Rose 26 November 2019 в 20:39
поделиться

Возможно, это не лучший способ, но он работает.

// 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). Физический путь изображения должен содержать путь сервера, таким образом, "substract" их, покидая только путь изображения относительно сервера (как: \design\picture.jpg). Замените обратные косые черты наклонными чертами и добавьте его к URL сервера.

3
ответ дан Biri 26 November 2019 в 20:39
поделиться

Насколько я знаю, что нет никакой единственной функции, которая делает это (возможно, Вы искали инверсию MapPath?). Я хотел бы знать, существует ли такая функция. До тех пор я просто взял бы имя (имена) файла, возвращенное GetFiles, удалил бы путь и предварительно ожидал бы корень URL. Это может быть сделано в общем.

0
ответ дан 26 November 2019 в 20:39
поделиться

Я думаю, что это должно работать. Это могло бы быть выключено на наклонных чертах. Не уверенный, если они необходимы или нет.

string url = Request.ApplicationPath + "/" + photosLocation + "/" + files[0];
-2
ответ дан Dementic 26 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: