Сохранить файл с URL с помощью C#

Чтобы сохранить файл с URL в C#, создайте пустой HTMLDocument, подготовьте RequestMessage для целевого URL, отправьте его через document.Context.Network.Send(request), проверьте статус ответа и запишите полученные байты в локальный файл.

В этой статье показан пример C#, который можно использовать, чтобы сохранить файл с URL. Когда вы загружаете файл по URL, вы можете получить к нему доступ, передать его другим, сохранить локально и использовать веб-ресурс в дальнейшей обработке.

Файлы с URL часто сохраняют по нескольким причинам:

Сохранить файл с URL в C#

Чтобы сохранить файл с URL, нужно знать его адрес и иметь обработчик сетевых операций для соответствующего протокола. Aspose.HTML for .NET предоставляет удобные возможности для обработки URL с разными типами протоколов. Для этого создайте пустой HTML-документ и вызовите обработчик сетевого запроса, как показано в примере C# ниже.

Чтобы сохранить файл с URL в C#:

  1. Используйте конструктор HTMLDocument(), чтобы создать пустой документ.
  2. Создайте URL с путем к ресурсу, который нужно сохранить.
  3. Используйте конструктор RequestMessage(url), чтобы создать новый экземпляр RequestMessage, представляющий сообщение HTTP-запроса.
  4. Используйте метод Context.Network.Send(request), чтобы отправить запрос.
  5. Проверьте, успешно ли выполнен ответ, перед чтением содержимого.
  6. Если ответ успешен, используйте File.WriteAllBytes(), чтобы сохранить загруженный файл в локальной файловой системе.

Рассмотрим, как сохранить файл с URL с помощью библиотеки Aspose.HTML C#:

 1// Download file from URL using C#
 2
 3// Create a blank document; it is required to access the network operations functionality
 4using HTMLDocument document = new HTMLDocument();
 5
 6// Create a URL with the path to the resource you want to download
 7Url url = new Url("https://docs.aspose.com/html/images/handlers/message-handlers.png");
 8
 9// Create a file request message
10using RequestMessage request = new RequestMessage(url);
11
12// Download file from URL
13using ResponseMessage response = document.Context.Network.Send(request);
14
15// Check whether response is successful
16if (response.IsSuccess)
17{
18    // Save file to a local file system
19    File.WriteAllBytes(Path.Combine(OutputDir, url.Pathname.Split('/').Last()), response.Content.ReadAsByteArray());
20}

Типичные ошибки и исправления

ПроблемаПричинаРешение
Загруженный файл пустойТело ответа читается без проверки статуса ответа.Всегда проверяйте, успешен ли ответ, перед чтением содержимого.
Ошибка 404 при внешне корректном URLURL содержит незакодированные пробелы, специальные символы или неправильно разрешенный относительный путь.Кодируйте части URL при необходимости и используйте базовый URL страницы для разрешения относительных ссылок.
OutOfMemoryException при больших файлахВесь ответ загружается в память как массив байтов.Читайте ответ потоком и копируйте его в файл частями через буфер.
Сохраненный файл получил неверное расширениеПуть в URL или редирект не соответствует фактическому типу содержимого.Проверяйте заголовки ответа и осознанно выбирайте локальное имя файла или расширение.
Запрос не выполняется на сервере или в контейнереСетевой доступ, настройки прокси, сертификаты или разрешенные URL ограничены.Проверьте сетевые права, конфигурацию прокси и CA-сертификаты в среде выполнения.

FAQ

Можно ли скачать файл с помощью HTTP POST?

Да. Установите request.Method = HttpMethod.Post и добавьте содержимое через request.Content = new StringContent(...) перед отправкой запроса.

Как добавить пользовательские заголовки, например API-ключи?

Используйте request.Headers.Add("Header-Name", "value") перед отправкой запроса.

Поддерживает ли Aspose.HTML загрузку через FTP?

Встроенный сетевой слой предназначен для рабочих процессов на базе HTTP и HTTPS. Для FTP нужна собственная сетевая реализация за пределами стандартного примера на этой странице.

Подходит ли этот подход для больших файлов?

Для больших файлов не загружайте весь ответ в память. Читайте содержимое ответа потоком и копируйте его в файл частями.

Другие платформы

Связанные статьи по извлечению данных

Вы можете загружать файлы с URL, используя полные примеры C# из репозитория Aspose.HTML for .NET на GitHub.