Создание ссылки на скачивание файла на файловом сервере - PullRequest
10 голосов
/ 11 октября 2011

Я ищу способ (легко, по предпочтению;)) создать ссылку на скачивание файла на отдельном файловом сервере.

Ситуация следующая: приложение, которое я разрабатываю(asp.net 2.0 в vb.net, но у меня есть похожая проблема в c #, у меня работает любое решение) будет работать внутри компании.Как показывает практика, хранилище файлов и веб-приложение находятся на двух отдельных серверах.

Мне нужно создать ссылку для загрузки файла, единственный доступный URL-адрес для доступа к файлу \ servername \ folder1 \ folder2 \ folder3 \ file.txt (может быть любым файлом)

Веб-ссылки просто не работают.Вот как это настроено в данный момент:

tablerowfield.Text = String.Format(
    "<a href=""\\servername\folder1\folder2\folder3\{0}"" 
        target=""_blank"">Click me</a>",
    filename)

Что не работает по понятным причинам.Раньше он был настроен на запись этого файла в сам путь приложения, и это работало отлично, но это не очень хорошая практика, и поэтому я изменяю его (или пытаюсь).

Я читаю решенияо создании страницы загрузки, а затем наличии таблицы в вашей БД, которая содержит ссылки и возвращает правильный веб-URL для загрузки, но, к сожалению, временное ограничение, с которым я столкнулся, не позволяет мне его разработать.

Предполагается, чтоЯ могу предоставить строку с полным путем к файлу, как показано выше, каков самый простой способ просто создать ссылку, которая при нажатии загружает документ?

Примечание. У меня 0 прав администратора в этомсреда.Это действительно не помогает мне.Давайте предположим, что я получил правильную ссылку, как указано выше, и имею соответствующие права доступа к файлу и тому подобное.

ОБНОВЛЕНИЕ:

Приведенный выше пример работает в IE, но нев Firefox и Chrome.IE преобразует его в ссылку file: // servername / ..., которая делает то, что должна, но FF и Chrome активно решили, что это небезопасно, и отключили ее в своих браузерах.

Ответы [ 4 ]

19 голосов
/ 11 октября 2011

Вы можете использовать ASHX-файл (скажем, downloadfile.ashx) и использовать в нем следующий код (не проверенный, но это будет что-то подобное):

 Response.Clear();
 Response.ContentType = "application/octet-stream";
 Response.AddHeader("Content-Disposition", "attachment; filename=abc.txt");                                            
 Response.WriteFile(Server.MapPath("\\servername\folder1\folder2\folder3\abc.txt"));
 Response.End();

и затем используйте это в своем теге привязки как:

<a href="downloadfile.ashx"  target=""_blank"">Click me</a>

Примечание. Вы также можете передавать параметры для загрузки различных файлов, например:

<a href="downloadfile.ashx?file=abc.txt"  target=""_blank"">Click me</a>

, а затем в файле ashx используйте имя файла для загрузки соответствующего файла.

2 голосов
/ 13 августа 2012

этот фрагмент кода создаст файл в папке загрузки с именем = hi.txt и содержимым как "слава богу, наконец-то файл был загружен"

 Response.Clear();
 Response.ContentType = "application/octet-stream";
 Response.AddHeader("Content-Disposition", "attachment; filename=hi.txt");
 Response.Write("thanks god, finally file got downloaded.");
 Response.End();
0 голосов
/ 15 сентября 2013

Если ваш файл уже существует на сервере, вы можете использовать этот код в событии нажатия кнопки загрузки, например

protected void downloadpdf_Click(object sender, EventArgs e)
{
    Response.Clear();
    Response.ContentType = "application/octet-stream";
    Response.AddHeader("Content-Disposition", "attachment; filename=""downloadName.pdf""");
    Response.WriteFile(Server.MapPath(@"~/path of pdf/actualfile.pdf"));
    Response.End();
}
0 голосов
/ 11 октября 2011

\\servername\folder1\folder2\folder3\... - это UNC-путь, который нельзя использовать из браузера.Поскольку файлы находятся на отдельном сервере, вам необходим атрибут href формы http://server-name/folder1/folder2/file.txt.

Если имя сервера неразрешимо для клиентов, вам необходимо сначала получить IP-адрес сервера, а затем сформулировать href в виде: http://10.1.1.30/folder1/folder2/file.txt

Вот какВы получаете IP-адрес от имени сервера:

IPAddress[] host;
host = Dns.GetHostAddresses("server-name");
string ip = host[0].ToString();         

РЕДАКТИРОВАТЬ:

Мне нужно создать ссылку для загрузки файла

При использовании решения ashx ваше приложение будет считывать файл с сервера и передавать его клиентам, а не просто предоставлять клиентам ссылку для загрузки файла непосредственно с файлового сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...