Response.AddHeader видит путь к файлу как имя файла

1

У меня есть элемент управления ImageButton в ListView, который при щелчке должен загрузить изображение с правильным ID.

Здесь ImageButton ASPX:

<asp:ImageButton runat="server" ID="ibtDownloadImage" ImageUrl="img/downloadIcon.png" OnClick="ibtDownloadImage_OnClick" CommandArgument='<%# Convert.ToString(Eval("ID"))+Convert.ToString(Eval("FileExtension")) %>' />

Как вы можете видеть, когда он щелкнут, он выполняет метод "ibtDownloadImage_OnClick" и устанавливает аргумент команды ID и файлExtension (например, 1.jpg, который является именем изображения).

Мой код С# для ibtDownloadImageOnClick:

protected void ibtDownloadImage_OnClick(object sender, EventArgs e)
        {


            ImageButton img = (ImageButton)sender;
            string file = img.CommandArgument;

            String imgURLtoDownload = @"img/uploads/"+file;


            Response.AddHeader("Content-Disposition", "attachment; filename=" + imgURLtoDownload);
        }

Когда я нажимаю элемент управления ImageButton, он загружает файл под названием "img-uploads-1.jpg" (без речевых меток), поэтому кажется, что я беру то, что я намеревался быть файловым путем как часть имени, и заменяя/с -...

Есть какие нибудь идеи как это починить? Похоже, это должно быть простым решением.

Я выполнил отладку с точкой останова на линии Response.AddHeader, а imgURLtoDownload - img/upload/1.jpg (как и должно быть).

  • 0
    Response.ContentType = где эта часть кода присваивается .. также эта строка правильная `String imgURLtoDownload = @" img / uploads / "+ file;` если она указывает на `ImageUrl =" img / downloadIcon.png " `также попробуйте добавить ~ перед img, если у вас также есть проблемы
Теги:

1 ответ

0
Лучший ответ

Вы можете читать содержимое файла как двоичный, скажем, у вас есть функция для этого, которая принимает имя файла, GetFileContent(Filepath) массив байтов как двоичный контент, и это имя функции GetFileContent(Filepath). Затем вы можете использовать эту функцию для записи контента в ответ и все же указать настраиваемый путь.

ImageButton img = (ImageButton)sender;
string file = img.CommandArgument;
String imgURLtoDownload = @"img/uploads/"+file;
byte[] data= GetFileContent(Server.MapPath(imgURLtoDownload));
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file);
Response.ContentType = System.Web.MimeMapping.GetMimeMapping(Server.MapPath(imgURLtoDownload));     
Response.BinaryWrite(data);
Response.End();


public byte[] GetFileContent(string Filepath)
{
    return System.IO.File.ReadAllBytes(Filepath);
}
  • 0
    С этим кодом я получаю сообщение об ошибке: «Не удалось найти часть пути« C: \ Program Files (x86) \ IIS Express \ img \ uploads \ 1.jpg '». когда я нажимаю на кнопку. Это не может идти в родительский каталог
  • 1
    Неважно, не видел, вы добавили Server.MapPath! Это полностью исправлено, спасибо большое!
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню