Съжалявам, че ми отне толкова време, за да стигна до този въпрос. Благодаря за отговора. Ето някои данни от Fiddler.

person bananajunk    schedule 12.05.2011    source източник
comment
kb.mozillazine.org/Links_to_local_pages_don%27t_work Проблемът се дължи на firefox, а не на код   -  person bananajunk    schedule 12.05.2011


Отговори (3)


Не можете да направите това без виртуална директория, ако файловете не се намират на същия сървър като уеб сървъра. Файловете трябва да се доставят на клиенти чрез уеб сървър.

Въпреки че можете да използвате IIS Express за създаване на виртуални директории – погледнете тази дискусионна тема. Може също да се наложи да активирате външен достъп до IIS Express (тази публикация в WebMatrix трябва да бъде полезна в това отношение). Забележка: когато използвате виртуална директория, вашите URL адреси ще трябва да използват схемата http: или https: вместо file:.

Друг подход би бил да качите файловете, които искате да споделите, на място на уеб сървъра и да ги обслужвате от уеб сървъра.

person dariom    schedule 12.05.2011

Ако препращате към локалната файлова система, трябва да форматирате хипервръзките, както следва:

file:///c:/myfile.txt

person DaveRead    schedule 12.05.2011

Мисля, че можете да постигнете това, като използвате страна на сървъра за изтегляне, който има достъп до файловете вместо вас, след което ги обслужва чрез 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>

(Разбира се, тази проба е много проста и мисля, че е пълна с грешки, но е само за изясняване на пътя)

person tanathos    schedule 12.05.2011