2015-04-28 2 views
0

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

<asp:Label ID="lbl_Attachment" runat="server"> 
</asp:Label> 

lbl_Attachment.Text = "<a href='../Uploads/" + 
         ds_row["Attachment"].ToString() + "'>" + 
         ds_row["Attachment"].ToString() + "</a>"; 

Но это не работает. Поэтому я изменил код на следующий, чтобы открыть любой файл (изображение/PDF/слово) в новой вкладке браузера и ошибка сохраняется:

 hyperlinkAppDoc.NavigateUrl = 
      ResolveUrl("../Uploads/" + 
      ds_row["Attachment"].ToString()); 
     hyperlinkAppDoc.Target = "_blank"; 

enter image description here

Что я могу сделать, чтобы исправить эту проблему ? Типы MIME доступны в IIS.


UPDATE: Я пытаюсь разработать другой подход. Однако Server.MapPath воспроизводит локальный диск вместо wwwroot. Как я могу указать путь к папке wwwroot?

string pdfPath = Server.MapPath("~/SomeFile.pdf"); 
WebClient client = new WebClient(); 
Byte[] buffer = client.DownloadData(pdfPath); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-length", buffer.Length.ToString()); 
Response.BinaryWrite(buffer); 

ответ

0

Возможно, вы использовали asp.hyperlink. Как следующий

<asp:HyperLink id="hyperlink1" NavigateUrl="<set_from_code_behind>" Text="Text to redirect" runat="server"/>

И установить NavigateURL из кода за следующим.

hyperlink1.NavigateUrl= "Uploads/" + ds_row["Attachment"].ToString();

+0

Какая ошибка? К этому времени закрыт datareader? Можете ли вы попробовать удалить '..'? –

+0

Я говорил использовать '/', если это в одном месте, вы можете попробовать '~' или сообщить мне, где находится местоположение относительно родительского пути. –

+0

@aspiring, обновленный ответ, проверьте, он должен работать - удалите '../' –

0

В вашей ситуации, я предлагаю вам добавить один ключ в <appSettings> тег в файле веб-конфигурации.

<appSettings>  
    <add key="WebsiteURL" value="http://localhost:1234/WebsiteName/"/> 
</appSettings> 

Следующий шаг - взять одну гиперссылку в файле .Aspx.

<asp:HyperLink ID="HyperLink1" runat="server" Target="_blank"></asp:HyperLink> 

В коде за конкатенацией ключ AppSettings + путь к файлу загрузки из корня.

string base_path = ConfigurationSettings.AppSettings["WebsiteURL"]; 
HyperLink1.NavigateUrl = base_path + "Uploads/" + ds_row["Attachment"].ToString(); 

Пожалуйста, дайте мне знать, если у вас есть вопросы.

+0

Ничего особенного, у меня была эта ошибка 404 8 месяцев назад, и я решил это так. Когда я продолжал жить, я только что заменил localhost url на живой url, и все еще он работает нормально. – Keval

0

Весь пот был вызван проблемой пути. Работает старый код и новый код. Нет необходимости в коде веб-клиента.

Путь загрузки был установлен здесь:

public static string UploadDirectory = ConfigurationManager.AppSettings["UploadDirectory"];

Он был направлен в другую папку в корне другой, чем когда приложение было. Поэтому файлы были загружены, но не были загружены.

Я изменил его на AppDomain.CurrentDomain.BaseDirectory. После того, как мы поговорим с пользователями, мы соответствующим образом настроим его.

Смежные вопросы