Не удается загрузить файлы/изображения из папки загрузки в asp.net

мне нужно загрузить изображения, которые я сохранил в папке в asp.net имени веб-приложения как uploads

у меня есть функция, которая должна загрузить это как

private void downloadAnImage(string strImage)
{
    Response.ContentType = "image/jpg";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + strImage);
    Response.TransmitFile(strImage);
    Response.End();
}

и я вызываю эту функцию из link button как

protected void lnkDwnSlc_Click(object sender, EventArgs e)
{
    if (Session["slc_filepath"] != null)
    {                 
         string path = Server.MapPath(Session["slc_filepath"].ToString());
         downloadAnImage(path);
    }
}

где Session["slc_filepath"] - это путь, хранящийся в session

но после запуска этого кода файл/изображение не загружается, и я не получил сообщения об ошибке, почему файл не загружается. И я проверил путь к файлу, используя breakpoint , это правильно,

Я много ищу в Google, но не могу понять, где я что-то пропустил.

EDIT: в событии загрузки страницы я извлекаю записи из таблицы, там я сохранил путь к файлу, а в сеансе я сохраняю его как

Session["slc_filepath"] = dt.Rows[0]["UploadSLC"].ToString();

где UploadSLC - это имя столбца таблицы, в которой я храню путь к изображению, а строка в базе данных выглядит как

~\uploads\ab071770-473a-4e1a-8cfc-addeccf565d5.jpg

person Waqas    schedule 05.11.2015    source источник
comment
Также поделитесь, как вы назначаете путь в сеансе, что будет более полезным.   -  person Suprabhat Biswal    schedule 05.11.2015
comment
@SuprabhatBiswal, пожалуйста, посмотрите мое редактирование   -  person Waqas    schedule 05.11.2015
comment
вставить Response.Flush() перед Response.End   -  person jomsk1e    schedule 05.11.2015
comment
@ jomsk1e, я сделал в соответствии с вашим предложением, но не работает, тот же результат ничего не делает   -  person Waqas    schedule 05.11.2015


Ответы (5)


Попробуй это:

private void downloadAnImage(string strImage)
{
    Response.Clear();
    Response.ContentType = "image/jpg";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + strImage);
    Response.TransmitFile(strImage);
    Response.Flush();
    Response.End();
}

Рад помочь вам!

person Igor Quirino    schedule 05.11.2015
comment
Вы используете панели ajax для этого? - person Igor Quirino; 05.11.2015

Я предлагаю устранить проблему, откуда она взялась.

  1. Попробуйте жестко заданный путь (чтобы убедиться, что вы проходите правильный путь)

    //try forward or back slash, make sure the file exists
    string path = Server.MapPath("~/uploads/ab071770-473a-4e1a-8cfc-addeccf565d5.jpg"); 
    
  2. Попробуй это:

    private void downloadAnImage(string strImage)
    {
        Response.ContentType = "image/jpg";
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + strImage);
        Response.TransmitFile(strImage);
        Response.Flush();
        Response.End();
    }
    
  3. Убедитесь, что на стороне клиента нет ошибки javascript.

person jomsk1e    schedule 05.11.2015

Пожалуйста, исправьте путь к изображению при привязке из базы данных

например "~/Image/images.png".

PFB моего фрагмента кода вы можете получить решение.

protected void Page_Load (отправитель объекта, EventArgs e) { Session ["slc_filepath"] = "~/Image/images.png"; }

    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        string path = Server.MapPath(Session["slc_filepath"].ToString());
        downloadAnImage(path);
    }

    private void downloadAnImage(string strImage)
    {
        Response.ContentType = "image/jpg";
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + strImage);
        Response.TransmitFile(strImage);
        Response.End();
    }
person Mask    schedule 05.11.2015


Я нашел ответ после долгих поисков, но подсказка, которую я получил от моего младшего в моей команде, я очень ценю это, я просто добавил

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
            scriptManager.RegisterPostBackControl(this.lnkDwnSlc); 

в событии pageLoad, потому что я использую панель обновлений и диспетчер сценариев на моей странице aspx и начальную загрузку для дизайна, поэтому он остановил функциональность

после этого он работает как шарм,

спасибо за все ваши усилия и поддержку,

person Waqas    schedule 09.11.2015