Как сохранить файлы с интерфейсом FileUpload (GUI) в выбранном месте в asp.net?

Это сводится к простому сохранению в определенном месте в asp.net. Аналогично использованию "Сохранить как..." в любой стандартной программе, такой как Microsoft Word.

GUI, который я ищу, точно такой же, как GUI для элемента управления FileUpload в asp.net. Однако элемент управления FileUpload позволяет загружать файлы только в запущенную программу. Все, что я хочу, это выбрать место для сохранения файла, созданного в программе.

Я уже написал следующий код:

        protected void btnSaveYourBuild_Click(object sender, EventArgs e)
        {

// Раздел А

        System.Drawing.Image chosenGoldenLineTop = GetSystemDrawingImage(ImageGoldenLineTop);
        System.Drawing.Image chosenGoldenLineBottom = GetSystemDrawingImage(ImageGoldenLineBottom);
        System.Drawing.Image chosenImageTop = GetSystemDrawingImage(ImageTop);
        System.Drawing.Image chosenImageJungle = GetSystemDrawingImage(ImageJungle);
        System.Drawing.Image chosenImageMid = GetSystemDrawingImage(ImageMid);
        System.Drawing.Image chosenImageAdc = GetSystemDrawingImage(ImageAdc);
        System.Drawing.Image chosenImageSupp = GetSystemDrawingImage(ImageSupp);

// Раздел B

        Bitmap B = new Bitmap(chosenGoldenLineBottom.Width, chosenGoldenLineBottom.Height + chosenImageSupp.Height + chosenGoldenLineTop.Height);
        using (Graphics g = Graphics.FromImage(B))
        {
            g.DrawImage(chosenGoldenLineTop, 0, 0, 1540, 49);
            g.DrawImage(chosenImageTop, 0, chosenGoldenLineTop.Height, 308, 560);
            g.DrawImage(chosenImageJungle, chosenImageTop.Width, chosenGoldenLineTop.Height, 308, 560);
            g.DrawImage(chosenImageMid, chosenImageTop.Width + chosenImageJungle.Width, chosenGoldenLineTop.Height, 308, 560);
            g.DrawImage(chosenImageAdc, chosenImageTop.Width + chosenImageJungle.Width + chosenImageMid.Width, chosenGoldenLineTop.Height, 308, 560);
            g.DrawImage(chosenImageSupp, chosenImageTop.Width + chosenImageJungle.Width + chosenImageMid.Width + chosenImageAdc.Width, chosenGoldenLineTop.Height, 308, 560);
            g.DrawImage(chosenGoldenLineBottom, 0, chosenGoldenLineTop.Height + chosenImageTop.Height, 1540, 53);
        }

// Раздел C

            B.Save(System.IO.Path.Combine(
            Environment.GetFolderPath(
            Environment.SpecialFolder.Desktop),
            "Team Awesome v3" + ".png")); 
           // Saves on the desktop
        }

Для вашего удобства я разделил большую партию кода на 3 раздела: A, B и C. Просто сказал: в разделе A 7 изображений. Раздел B объединяет 7 изображений в одно увеличенное изображение. Раздел C сохраняет изображение на рабочий стол.

Я очень доволен этим уже. Но я уверен, что пользователи хотели бы иметь возможность выбрать конкретное место для сохранения этого 1 большего изображения, по крайней мере, я бы.

Теперь решение, которое я пытаюсь найти, это либо элемент управления, который может сохранить 1 большее изображение в выбранном пользователем месте, который может заменить раздел C.

ИЛИ ЖЕ

Элемент управления, который выбирает определенное местоположение и может вернуть путь, по которому я могу сохранить 1 увеличенное изображение, заменив только один аргумент из раздела C.

Я пробовал множество разных вещей, которые оказались неэффективными или потерпели неудачу с первой попытки. Например, система FileDialog (которая недоступна в asp.net) и элемент управления FileUpload, который загружает файл только в программу, а не наоборот.

Обратите внимание, как можно попытаться получить Path из элемента управления FileUpload и попытаться создать иллюзию для пользователя, что он сохраняет файл. Но нельзя просто вставить редактирование FileName (перед сохранением, как в любом обычном случае) в элемент управления FileUpload, и при этом вы не можете выбрать каталог, вы должны выбрать файл и обрезать имя файла в пути, что приводит к путанице для пользователя.

Я потратил около 17 часов, пытаясь найти решение, но мне не удалось. Не могли бы вы помочь мне?

1 ответ

Сохранение пользователя зависит от браузера, asp.net работает в "песочнице" по соображениям безопасности и не может это изменить. Может быть, плагин / надстройка в браузере может помочь вам достичь функциональности, но это все еще крайне маловероятно с решением, которое вы пытаетесь.
с помощью надстройки браузера вы можете добиться этого, позволив ей прослушивать веб-URL, а затем дать пользователю приглашение сохранить файл, который фактически вырезает и вставляет файл, сохраненный в пользовательской системе (например, в временную папку).
Но, опять же, для установки в браузере пользователя потребуется надстройка браузера, которая является необязательной для пользователей и написана по-разному для каждого браузера.
С уважением

Другие вопросы по тегам