Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 101

Изображение из буфера обмена в Base64

17.07.2020, 21:21. Показов 2283. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
для примера код
C#
1
2
3
4
5
6
7
        if (Clipboard.ContainsImage())
        {
            Image image = Clipboard.GetImage();
            MemoryStream ms = new MemoryStream();
            image.Save(ms, ImageFormat.Jpeg);
            TextBox1.Text = Convert.ToBase64String(ms.ToArray());
        }
не отрабатывает.
если убрать условие if (Clipboard.ContainsImage()) - выдает ошибку.
Ссылка на объект не указывает на экземпляр объекта.

возможно ASP.NET имеет ограничения на работу с буфером обмена?
какие могут быть варианты решения?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2020, 21:21
Ответы с готовыми решениями:

Как получить изображение с буфера обмена
вообще хочу сделать такую штуку,нажимаю принтскрин и вставку изображения в форме,сначала изображение помещается в буфер обмена,как вообще...

QTextEdit вставить изображение из буфера обмена
Здравствуйте, собственно как это сделать? Пытался использовать QMimeData, но метод hasImage() возвращает false ( Система Ubuntu изображение...

Вставить изображение из буфера обмена в Canvas
Подскажите как вставить картинку из буфера обмена на холст Canvas?

19
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
17.07.2020, 21:42
Отладчиком смотрели что в буфере ?
0
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 101
17.07.2020, 21:53  [ТС]
в буфере то, что должно быть.

добавлю, что код прекрасно отрабатывает в WindowsForms.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
17.07.2020, 22:42
эска, asp.net выполняется на сервере, буфер обмена у клиента. Уже одно это должно дать понять что так делать не следует.
0
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 101
18.07.2020, 12:34  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
asp.net выполняется на сервере, буфер обмена у клиента
ну это же не значит, что между ними берлинская стена.
0
 Аватар для XIST
1962 / 1072 / 148
Регистрация: 01.10.2009
Сообщений: 3,620
Записей в блоге: 1
18.07.2020, 16:06
Цитата Сообщение от эска Посмотреть сообщение
ну это же не значит, что между ними берлинская стена.
Так Вам выше это и объяснили, разницу где сервер, а где клиент чувствуете?
0
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 101
18.07.2020, 18:46  [ТС]
что же вы отвечаете на вопросы которые ни кто не задает?
ближе к сути вопроса, пожалуйста - как из Clipboard передать данные на сервер?
например - сохранить в файл у клиента и передать на сервер, дальше работать с ним.
или - нет, этого сделать никак нельзя.
в концепции ваших ответов не удивлюсь тому, что в следующем ответе кто то начнет мне объяснять то, что я не вижу разницу между КМОП и ТТЛ.)
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
18.07.2020, 18:59
Цитата Сообщение от эска Посмотреть сообщение
объяснять то, что я не вижу разницу между КМОП и ТТЛ.)
Вау, полегче, мудрец

Во-первых, class Clipboard был создан для того, чтобы можно было ручками пользователя, работающего за ПК, копировать что-либо в буфер в одном приложении, и использовать в другом приложении.
Если на вашем веб-сервере параллельно еще растет и особый офисный планктон, как-то взаимодействующий с веб-сервером, то просим милости в документацию.
The Clipboard class can only be used in threads set to single thread apartment (STA) mode. To use this class, ensure that your Main method is marked with the STAThreadAttribute attribute.
Если же вы просто неправильно сформулировали вопрос, и вам нужно всего лишь отправить файлик с клиента (браузера, например), на веб-сервер, то это можно сделать примерно вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// метод принимающий файл
[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{
    // Verify that the user selected a file
    if (file != null && file.ContentLength > 0) 
    {
        // extract only the fielname
        var fileName = Path.GetFileName(file.FileName);
 
        // then save on the server...
        var path = Path.Combine(Server.MapPath("~/uploads"), fileName);
        file.SaveAs(path);
    }
    // redirect back to the index action to show the form once again
Разор-разметка:
C#
1
2
3
4
5
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file" />
    <input type="submit" value="OK" />
}
0
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 101
18.07.2020, 19:18  [ТС]
да правильно сформулирован.
другими словами - хотел со стороны клиента вырезанный "ножницами виндовс" кусок экрана, не сохраняя в файл передать на сервер конвертировать его в Base64.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
18.07.2020, 19:46
Цитата Сообщение от эска Посмотреть сообщение
добавлю, что код прекрасно отрабатывает в WindowsForms.
Ну во-первых само изображение нужно захватить на клиенте в WinForms, а потом с него отправить запрос на сервер - так будет правильно.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// на клиенте
if (Clipboard.ContainsImage())
        {
            Image image = Clipboard.GetImage();
            MemoryStream ms = new MemoryStream();
            image.Save(ms, ImageFormat.Jpeg);
 
 
              using (var client = new HttpClient())
           {
            client.BaseAddress = new Uri("existingUrl");
            var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("data", Convert.ToBase64String(ms.ToArray());)
            });
            var result = await client.PostAsync("existingRouteOfUrl", content);
            string resultContent = await result.Content.ReadAsStringAsync();
            Console.WriteLine(resultContent);
        }            
 
 
// на сервере
[ActionName("someUrl")]
[HttpPost]
public bool SomeData([FromBody] string data)
{           
     // это байты изображения
     var data = Convert.FromBase64String(data);
     return Ok();
}
Добавлено через 1 минуту
А получением данных из буфера Clipboard прямо на веб-сервере (да на любом сервере) никто не занимается - это для извращенцев. Да, да, все так, мудрец...
0
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 101
18.07.2020, 20:06  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Да, да, все так, мудрец...
ну так кто на что учился
Цитата Сообщение от IamRain Посмотреть сообщение
это для извращенцев.
так я по незнанию. по тому и спрашиваю. )
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
18.07.2020, 20:09
Server на то и сервер, чтобы строго выполнять одну конкретную выделенную для него функцию (от англ. to serve - служить).
И ничего его не должно беспокоить. Как-то так.
0
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 101
18.07.2020, 20:17  [ТС]
ну вероятно Вы меня не совсем поняли...
данные из буфера я пытаюсь получить ни машине клиента и передать их на сервер.
или я Вас не понял.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
18.07.2020, 20:56
Цитата Сообщение от эска Посмотреть сообщение
и передать их на сервер.
Ну так код выше это и делает, только нужно правильные url адреса воткнуть, и возможно немного отладить.
Запустите два приложения на машине - WinForms и MVC сайт - можно прямо в одном решении по F5 и отлаживайте сколько вашей душе угодно.

Добавлено через 42 секунды
Минуту.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
18.07.2020, 22:25
На Windows Forms форме кнопка - ее обработчик нажатия.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
private async void Btn_Click(object sender, EventArgs e)
        {
            if (!Clipboard.ContainsImage())
                return;
 
            var image = Clipboard.GetImage();
            var ms = new MemoryStream();
            image.Save(ms, ImageFormat.Jpeg);
 
 
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:61377");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
 
                var result = await client.PostAsync("Home/TakeFileImage", new SomePostRequest()
                {
                    Id =  1,
                    Data = Convert.ToBase64String(ms.ToArray())
                }, new JsonMediaTypeFormatter());
                var response =  result.EnsureSuccessStatusCode();               
            }
        }

Метод контроллера:
C#
1
2
3
4
5
6
7
8
9
[HttpPost]
        public IActionResult TakeFileImage([FromBody] SomePostRequest request)
        {
            if (string.IsNullOrEmpty(request?.Data))
                return BadRequest();
 
            var bytes = Convert.FromBase64String(request.Data);
            return Ok();
        }
Данные приходят, только адреса свои поставьте.
Можно вместо JsonFormatter-а использовать BSON форматтер - он более компактный, если работать с бинарными данными.
Сходу не получилось сделать. Также можно кроме как в Base64 использовать другие Base-кодировки, которые более компактные.
Миниатюры
Изображение из буфера обмена в Base64  
1
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 101
18.07.2020, 23:49  [ТС]
с WindowsForms всё сразу получилось. а решение нужно на Web, ASP.NET (не MVC)
И если бы можно было с Web запустить приложение на стороне клиента....

Спасибо.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
19.07.2020, 00:10
Цитата Сообщение от эска Посмотреть сообщение
И если бы можно было с Web запустить приложение на стороне клиента....
Можно, заходите в свойства решения и указываете в разделе Startup запуск нужных проектов.
Миниатюры
Изображение из буфера обмена в Base64  
0
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 101
19.07.2020, 01:25  [ТС]
так это не то, я о запуске клиентом с web страницы приложения на его компе...
0
 Аватар для sau
2774 / 2074 / 386
Регистрация: 22.07.2011
Сообщений: 7,822
25.07.2020, 22:14
эска, максимум что можно получить через браузер это скрин страницы вашего сайта , большего браузер не умеет.
иначе бы сейчас втихоря все фоткали пароли и логины на вашем пк и отправляли на сервер.
0
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 101
26.07.2020, 00:06  [ТС]
умеет. только с подтверждением пользователя.
например: запустить программу, которая выполнит нужные действия. правда клиенту нужно отправлять соответствующую ссылку и в реестре его компа нужны соответствующие записи. мне, как для корпоративного решения, подошло.
но, понимаю, что Вы - не о таких случаях.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.07.2020, 00:06
Помогаю со студенческими работами здесь

Сохранить изображение из буфера обмена в файл
Пожалуйста совет. В буфере сидит скрин экрана, как его сохранить? Или хотя бы, как обратиться можно к скрину? допустим в Image...

Загрузить изображение из буфера обмена (DLL)
Я создал DLL библиотеку и подключил её к C# проэкту. В dll должна быть функция на Си для загрузки изображения с буфера обмена, и она должна...

Получить изображение из буфера обмена через API
Здравствуйте, уважаемые форумчане. Поделитесь, пожалуйста, как получить изображение, находящееся в буфере обмена, через API-функции....

Перевести изображение в base64
Получаю изображение через TMemoryStream HTTP.GET('https://сайт.ru/static/file.html?a='+S_cреуaToken,imTM); imTM.Position:=0; ...

Base64 декодировать изображение
В файле хранится &lt;img alt=&quot;Как лечить подкожного клеща у собаки&quot; class=&quot;lazy lazy-hidden size-full wp-image-3092&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru