METANIT.COM

Практическое руководство. Загрузка файлов в элемент управления RichTextBox в Windows Forms

Элемент управления Windows Forms RichTextBox может отображать обычный текст, обычный текст в Юникоде или файл в формате RTF. Для этого вызовите метод LoadFile . Метод LoadFile можно также использовать для загрузки данных из потока. Дополнительные сведения см. в разделе LoadFile(Stream, RichTextBoxStreamType).

Загрузка файла в элемент управления RichTextBox

  1. Определить путь к открываемому файлу с помощью компонента OpenFileDialog . Его обзор приведен в статье Общие сведения о компоненте OpenFileDialog.
  2. Вызовите метод LoadFile элемента управления RichTextBox , указав загружаемый файл и при необходимости тип файла. В следующем примере загружаемый файл берется из свойства OpenFileDialog компонента FileName . Если вы вызываете метод с именем файла в качестве единственного аргумента, предполагается, что тип файла должен быть RTF. Чтобы указать другой тип файла, вызовите метод со значением перечисления RichTextBoxStreamType в качестве второго аргумента. В следующем примере компонент OpenFileDialog отображается при нажатии кнопки. Выбранный файл открывается и отображается в элементе управления RichTextBox . В этом примере предполагается, что форма содержит кнопку btnOpenFile .
Private Sub btnOpenFile_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnOpenFile.Click If OpenFileDialog1.ShowDialog() = DialogResult.OK Then RichTextBox1.LoadFile(OpenFileDialog1.FileName, _ RichTextBoxStreamType.RichText) End If End Sub 
private void btnOpenFile_Click(object sender, System.EventArgs e) < if(openFileDialog1.ShowDialog() == DialogResult.OK) < richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.RichText); >> 
private: void btnOpenFile_Click(System::Object ^ sender, System::EventArgs ^ e) < if(openFileDialog1->ShowDialog() == DialogResult::OK) < richTextBox1->LoadFile(openFileDialog1->FileName, RichTextBoxStreamType::RichText); > > 

(Visual C#, Visual C++) Поместите следующий код в конструктор формы для регистрации обработчика событий.

this.btnOpenFile.Click += new System.EventHandler(this. btnOpenFile_Click); 
this->btnOpenFile->Click += gcnew System::EventHandler(this, &Form1::btnOpenFile_Click); 

Важно! Для запуска этого процесса сборке может потребоваться уровень привилегий, предоставляемый классом System.Security.Permissions.FileIOPermission . При выполнении в контексте частичного доверия процесс может выдавать исключение из-за недостаточных привилегий. Дополнительные сведения см. в разделе Code Access Security Basics.

См. также раздел

Источник

Си шарп загрузка файла

Для отправки файлов на сервер HttpClient использует класс System.Net.Http.MultipartFormDataContent . Фактически этот класс выступает в качестве контейнера объектов HttpContent. А для добавления элементов в MultipartFormDataContent применяется метод Add()

public void Add(HttpContent content, string name, string fileName);

Первый параметр — отправляемое содержимое (это может быть как файлы, так и любые другие данные). Второй параметр — name определяет название данных в запросе, по которому мы можем получить файл на сервере. Третий параметр — fileName устанавливает имя файла.

Загрузка одного файла

Для тестирования загрузки файла определим приложение ASP.NET Core со следующим кодом:

var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapPost("/upload", async (HttpContext context) => < // получем коллецию загруженных файлов IFormFileCollection files = context.Request.Form.Files; // путь к папке, где будут храниться файлы var uploadPath = $"/uploads"; // создаем папку для хранения файлов Directory.CreateDirectory(uploadPath); // пробегаемся по всем файлам foreach (var file in files) < // формируем путь к файлу в папке uploads string fullPath = $"/"; // сохраняем файл в папку uploads using (var fileStream = new FileStream(fullPath, FileMode.Create)) < await file.CopyToAsync(fileStream); >> await context.Response.WriteAsync("Файлы успешно загружены"); >); app.Run();

Здесь метод app.MapPost() определяет конечную точку, которая обрабатывает запросы по пути «\upload». В обработчике конечной точки в качестве параметра получаем контекст запроса HttpContext и через него с помощью свойства context.Request.Form.Files получаем коллекцию загруженных файлов. Далее пробегаемся по этой коллекции и сохраняем все данные в проекте в папке «upoload» (если ее нет, она создается).

using System.Net.Http.Headers; class Program < static HttpClient httpClient = new HttpClient(); static async Task Main() < // адрес сервера var serverAddress = "https://localhost:7094/upload"; // пусть к файлу var filePath = @"D:\forest.jpg"; // создаем MultipartFormDataContent using var multipartFormContent = new MultipartFormDataContent(); // Загружаем отправляемый файл var fileStreamContent = new StreamContent(File.OpenRead(filePath)); // Устанавливаем заголовок Content-Type fileStreamContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); // Добавляем загруженный файл в MultipartFormDataContent multipartFormContent.Add(fileStreamContent, name: "file", fileName: "forest.jpg"); // Отправляем файл using var response = await httpClient.PostAsync(serverAddress, multipartFormContent); // считываем ответ var responseText = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseText); >>

Итак, в моем случае веб-приложение запущено по адресу «»https://localhost:7094/», поэтому для обращения к конечной точке, которая получает файлы, я использую адрес «»https://localhost:7094/upload». Также в моем случае загружается файл «D:\forest.jpg».

Для отправки создаем MultipartFormDataContent

using var multipartFormContent = new MultipartFormDataContent();

Обратите внимание на конструкцию using, которая позволит закрыть все связанные с объектом потоки, использованные при отправке файла.

Читайте также:  Java resource directory files

Затем создаем объект StreamContent , который получает содержимое файла в виде файлового потока:

var fileStreamContent = new StreamContent(File.OpenRead(filePath));

Устанавливаем mime-тип, который соответствует загружаемому файлу:

fileStreamContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");

Далее добавляем этот объект в MultipartFormDataContent:

multipartFormContent.Add(fileStreamContent, name: "file", fileName: "forest.jpg");

В конце отправляем файл и получаем ответ:

using var response = await httpClient.PostAsync(serverAddress, multipartFormContent); var responseText = await response.Content.ReadAsStringAsync();

Стоит отметить, что нам необязательно применять для отправки файла именно StreamContent. Например, можно считать данные файла в массив байтов и отправить его, используя класс ByteArrayContent :

using System.Net.Http.Headers; class Program < static HttpClient httpClient = new HttpClient(); static async Task Main() < // адрес сервера var serverAddress = "https://localhost:7094/upload"; // пусть к файлу var filePath = @"D:\forest.jpg"; // создаем MultipartFormDataContent using var multipartFormContent = new MultipartFormDataContent(); // считываем данные файла в массив байтов byte[] fileToBytes = await File.ReadAllBytesAsync(filePath); // формируем отправляемое содержимое var content = new ByteArrayContent(fileToBytes); // Устанавливаем заголовок Content-Type content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); // Добавляем загруженный файл в MultipartFormDataContent multipartFormContent.Add(content, name: "file", fileName: "forest5.jpg"); // Отправляем файл using var response = await httpClient.PostAsync(serverAddress, multipartFormContent); // считываем ответ var responseText = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseText); >>

Код сервера при этом остается тем же.

Множественная отправка файлов

Подобным образом можно отправлять и большее количество файлов. Например:

using System.Net.Http.Headers; class Program < static HttpClient httpClient = new HttpClient(); static async Task Main() < // адрес для отправки var serverAddress = "https://localhost:7094/upload"; // пути к файлам var files = new string[] < "D:\forest.jpg", "D:\cats.jpg" >; using var multipartFormContent = new MultipartFormDataContent(); // в цикле добавляем все файлы в MultipartFormDataContent foreach (var file in files) < // получаем краткое имя файла var fileName = Path.GetFileName(file); var fileStreamContent = new StreamContent(File.OpenRead(file)); fileStreamContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); multipartFormContent.Add(fileStreamContent, name: "files", fileName: fileName); >// Отправляем файлы using var response = await httpClient.PostAsync(serverAddress, multipartFormContent); // считываем ответ var responseText = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseText); > >

Отправка смешанного содержимого

Плюсом MultipartFormDataContent состоит в том, что он позволяет отправить смешенного содержимое, не только файлы. Например, пусть у нас веб-приложение ASP.NET получает некоторые данные:

using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapPost("/upload", async (HttpContext context) => < var form = context.Request.Form; // получаем отдельные данные string? username = form["username"]; string? email = form["email"]; // получаем коллецию загруженных файлов IFormFileCollection files = form.Files; // путь к папке, где будут храниться файлы var uploadPath = $"/uploads"; // создаем папку для хранения файлов Directory.CreateDirectory(uploadPath); foreach (var file in files) < // путь к папке uploads string fullPath = $"/"; // сохраняем файл в папку uploads using (var fileStream = new FileStream(fullPath, FileMode.Create)) < await file.CopyToAsync(fileStream); >> return $"Данные пользователя () успешно загружены"; >); app.Run();

На сервере теперь из коллекции context.Request.Form получаем данные с ключом «username» и «email» (условные имя и электронный адрес пользователя).

Читайте также:  Заголовок страницы

На клиенте определим следующий код:

using System.Net.Http.Headers; class Program < static HttpClient httpClient = new HttpClient(); static async Task Main() < using var multipartFormContent = new MultipartFormDataContent(); // добавляем обычные данные multipartFormContent.Add(new StringContent("Tom"), name: "username"); multipartFormContent.Add(new StringContent("tom@localhost.com"), name: "email"); // добавляем файл var fileStreamContent = new StreamContent(File.OpenRead("D:\logo.jpg")); fileStreamContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); multipartFormContent.Add(fileStreamContent, name: "files", fileName: "logo.jpg"); // Отправляем данные using var response = await httpClient.PostAsync("https://localhost:7094/upload", multipartFormContent); // считываем ответ var responseText = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseText); >>

В данном случае кроме файла в MultipartFormDataContent добавляется два объекта StringContent, который представляет обычную строку. Ключи обоих объектов соответствуют тем, которые используются для получения данных на сервере — «username» и «email».

В результате выполнения консоль нам выведет:

Данные пользователя Tom (tom@localhost.com) успешно загружены

А на сервере в папке uploads появится еще один файл — logo.jpg.

Источник

Си шарп загрузка файла

Рассмотрим, как загружать файлы на сервер в ASP.NET Core. Все загружаемые файлы в ASP.NET Core представлены типом IFormFile из пространства имен Microsoft.AspNetCore.Http . Соответственно для получения отправленного файла в контроллере необходимо использовать IFormFile. Затем с помощью методов IFormFile мы можем произвести различные манипуляции файлом — получит его свойства, сохранить, получить его поток и т.д. Некоторые его свойства и методы:

  • ContentType : тип файла
  • FileName : название файла
  • Length : размер файла
  • CopyTo/CopyToAsync : копирует файл в поток
  • OpenReadStream : открывает поток файла для чтения

Для тестирования данной возможности определим в проекте папку html , в которой создадим файл index.html

Как загружать файлы в ASP.NET Core и C#

Определим в файле index.html следующий код:

       

Выберите файл для загрузки




В данном случае форма содержит набор элементов с типом file , через которые можно выбрать файлы для загрузки. В данном случае на форме три таких элемента, но их может быть и меньше и больше. А благодаря установке атрибута формы enctype=»multipart/form-data» браузер будет знать, что вместе с формой надо передать файлы.

Читайте также:  Php call to undefined function iconv in

Отправляться файлы будут в запросе типа POST на адрес «/upload».

Теперь в файле Program.cs определим код, который будет получать загружаемые файлы:

var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.Run(async (context) => < var response = context.Response; var request = context.Request; response.ContentType = "text/html; charset=utf-8"; if (request.Path == "/upload" && request.Method=="POST") < IFormFileCollection files = request.Form.Files; // путь к папке, где будут храниться файлы var uploadPath = $"/uploads"; // создаем папку для хранения файлов Directory.CreateDirectory(uploadPath); foreach (var file in files) < // путь к папке uploads string fullPath = $"/"; // сохраняем файл в папку uploads using (var fileStream = new FileStream(fullPath, FileMode.Create)) < await file.CopyToAsync(fileStream); >> await response.WriteAsync("Файлы успешно загружены"); > else < await response.SendFileAsync("html/index.html"); >>); app.Run();

Здесь если запрос приходит по адресу «/upload», а сам запрос представляет запрос типа POST, то приложение получает коллекцию загруженных файлов с помощью свойства Request.Form.Files , которое представляет тип IFormFileCollection :

IFormFileCollection files = request.Form.Files;

Далее определяем каталог для загружаемых файлов (предполагается, что файлы будут храниться в каталоге «uploads», которая располагается в папке приложения)

Если такой папки нет, то создаем ее. Затем перебираем всю коллекцию файлов.

foreach (var file in files)

Каждый отдельный файл в этой коллекции представляет тип IFormFile. Для копирования файла в нужный каталог создается поток FileStream, в который записывается файл с помощью метода CopyToAsync .

using (var fileStream = new FileStream(fullPath, FileMode.Create))

Если запрос идет по другому адресу и/или не представляет тип POST, то отправляем клиенту html-страницу index.html .

Обратимся к приложению и выберем файлы для загрузки:

Upload files in ASP.NET Core and C#

И после успешной загрузки нам отобразиться соответствующее сообщение:

Загрузка файлов на сервер в ASP.NET Core и C#

А в каталоге проекта будет создана папка uploads, в которой появятся загуженные файлы:

Источник

Оцените статью