Отговори (3)
Не можете да направите това без виртуална директория, ако файловете не се намират на същия сървър като уеб сървъра. Файловете трябва да се доставят на клиенти чрез уеб сървър.
Въпреки че можете да използвате IIS Express за създаване на виртуални директории – погледнете тази дискусионна тема. Може също да се наложи да активирате външен достъп до IIS Express (тази публикация в WebMatrix трябва да бъде полезна в това отношение). Забележка: когато използвате виртуална директория, вашите URL адреси ще трябва да използват схемата http: или https: вместо file:.
Друг подход би бил да качите файловете, които искате да споделите, на място на уеб сървъра и да ги обслужвате от уеб сървъра.
Ако препращате към локалната файлова система, трябва да форматирате хипервръзките, както следва:
file:///c:/myfile.txt
Мисля, че можете да постигнете това, като използвате страна на сървъра за изтегляне, който има достъп до файловете вместо вас, след което ги обслужва чрез http.
httphandler, чийто метод ProcessRequest може да бъде (много опростен) така:
public void ProcessRequest(HttpContext context)
{
if (context.Request.Params["file"] != null)
{
string filename = context.Request.Params["file"].ToString();
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.Buffer = true;
FileInfo fileInfo = new FileInfo(filename);
if (fileInfo.Exists)
{
context.Response.ContentType = /* your mime type */;
context.Response.AppendHeader("content-disposition", string.Format("attachment;filename={0}", fileInfo.Name));
context.Response.WriteFile(filename);
}
context.Response.End();
}
}
тогава ще изградите връзката, която да насочва вашия манипулатор с файла като параметър:
var exDir = @"\\Server\folder\Exception";
DirectoryInfo dir = new DirectoryInfo(exDir);
foreach (FileInfo exFile in dir.GetFiles())
{
exLabel.Text += @"<a href='/bgdownloader.ashx?file="+ exFile.Name + "'> "+exFile.FullName+" </a><br/>";
}
Не забравяйте да настроите манипулатора в web.config:
<system.web>
<httpHandlers>
...
<add verb="*" path="downloader.ashx" type="YourNamespace.downloader"/>
</httpHandlers>
</system.web>
(Разбира се, тази проба е много проста и мисля, че е пълна с грешки, но е само за изясняване на пътя)