Есть ли какой-нибудь класс, библиотека или фрагмент кода, который поможет мне загружать файлы с помощью HTTPWebrequest ?
Изменить 2:
Я не хочу загружать в папку WebDAV или что-то в этом роде. Я хочу смоделировать браузер, так же, как вы загружаете свой аватар на форум или загружаете файл через форму в веб-приложении. Загрузить в форму, которая использует multipart / form-data.
Редактировать:
WebClient не покрывает мои требования, поэтому я ищу решение с HTTPWebrequest .
.net
upload
httpwebrequest
др. злой
источник
источник
Ответы:
Взял приведенный выше код и исправил его, потому что он выдает внутреннюю ошибку сервера 500. Есть некоторые проблемы с \ r \ n плохо позиционированными и пробелами и т. Д. Применен рефакторинг с потоком памяти, записывающим непосредственно в поток запросов. Вот результат:
и образец использования:
Он может быть расширен для обработки нескольких файлов или просто вызывать его несколько раз для каждого файла. Однако это соответствует вашим потребностям.
источник
"\r\n--" + boundary + "--\r\n"
противном случае дополнительные файлы будут обрезаны.Я искал что-то вроде этого, нашел в: http://bytes.com/groups/net-c/268661-how-upload-file-via-c-code (изменено для корректности):
источник
ОБНОВЛЕНИЕ: Использование .NET 4.5 (или .NET 4.0 путем добавления пакета Microsoft.Net.Http от NuGet) это возможно без внешнего кода, расширений и «низкоуровневых» манипуляций HTTP. Вот пример:
источник
В моем FAQ по загрузке ASP.NET есть статья об этом, с примером кода: выгрузка файлов с помощью запроса POST RFC 1867 с HttpWebRequest / WebClient . Этот код не загружает файлы в память (в отличие от кода выше), поддерживает несколько файлов, а также поддерживает значения форм, настройку учетных данных, файлов cookie и т. Д.
Изменить: похоже, Axosoft снял страницу. Спасибо, парни.
Это все еще доступно через archive.org.
источник
Основываясь на приведенном выше коде, я добавил поддержку нескольких файлов, а также загрузку потока напрямую без необходимости иметь локальный файл.
Чтобы загрузить файлы на определенный URL, включая некоторые параметры сообщения, выполните следующие действия:
Чтобы еще больше это улучшить, можно определить имя и тип пантомимы из самого файла.
источник
что-то вроде этого близко: (непроверенный код)
источник
Я думаю, что вы ищете что-то более похожее на WebClient .
В частности, UploadFile () .
источник
Взял вышеизложенное и модифицировал его, принимал некоторые значения заголовка и несколько файлов
источник
\r\n--" + boundary + "--\r\n
Пример VB (преобразованный из примера C # в другом сообщении):
источник
Мне пришлось столкнуться с этим недавно - еще один способ приблизиться к этому - использовать тот факт, что WebClient является наследуемым, и изменить исходный WebRequest оттуда:
http://msdn.microsoft.com/en-us/library/system.net.webclient.getwebrequest(VS.80).aspx
Я предпочитаю C #, но если вы застряли с VB, результаты будут выглядеть примерно так:
источник
Есть еще один рабочий пример с некоторыми моими комментариями:
И есть пример использования:
источник
Я искал для загрузки файла и добавления некоторых параметров в запрос multipart / form-data в VB.NET, а не через обычную форму публикации. Благодаря ответу @JoshCodes я получил направление, которое искал. Я публикую свое решение, чтобы помочь другим найти способ выполнить публикацию с использованием файла и параметров, html-эквивалент того, чего я пытаюсь достичь: html
Из-за того, что я должен предоставить apiKey и подпись (которая является вычисленной контрольной суммой параметров запроса и сцепленной строки ключа API), мне нужно было сделать это на стороне сервера. Другая причина, по которой мне потребовалось сделать это на стороне сервера, заключается в том, что публикация файла может быть выполнена в любое время путем указания файла, уже находящегося на сервере (с указанием пути), поэтому во время формы файл не будет выбран вручную. Файл данных формы post таким образом не будет содержать поток файла. В противном случае я мог бы вычислить контрольную сумму с помощью обратного вызова ajax и отправить файл через сообщение html, используя JQuery. Я использую .net версии 4.0 и не могу обновить до 4.5 в реальном решении. Поэтому мне пришлось установить Microsoft.Net.Http с помощью Nuget CMD
источник
Модифицированный код @CristianRomanescu для работы с потоком памяти, принятия файла в виде байтового массива, разрешения null nvc, возврата ответа на запрос и работы с заголовком авторизации. Протестировал код с помощью Web Api 2.
Testcode:
источник
Для меня следующие работы (в основном вдохновленные всеми следующими ответами) я начал с ответа Элада и изменил / упростил вещи так, чтобы они соответствовали моим потребностям (удалите не входные данные из файловой формы, только один файл, ...).
Надеюсь, что это может помочь кому-то :)
(PS: я знаю, что обработка исключений не реализована, и предполагается, что она была написана внутри класса, поэтому мне может потребоваться некоторое усилие по интеграции ...)
источник
Не уверен, если это было опубликовано ранее, но я получил это, работая с WebClient. Я прочитал документацию для WebClient. Ключевой момент, который они делают, это
Поэтому все, что я сделал, это wc.QueryString.Add («source», generateImage), чтобы добавить различные параметры запроса и каким-то образом сопоставить имя свойства с загруженным изображением. Надеюсь, поможет
источник
Я написал класс, используя WebClient, когда делали многочастную загрузку форм.
http://ferozedaud.blogspot.com/2010/03/multipart-form-upload-helper.html
Это будет работать со всеми версиями .NET Framework.
источник
Я никогда не могу заставить примеры работать должным образом, я всегда получаю 500 ошибок при отправке их на сервер.
Однако я наткнулся на очень элегантный способ сделать это в этом URL
Он легко расширяется и, очевидно, работает как с двоичными файлами, так и с XML.
Вы называете это, используя что-то похожее на это
источник
Проверьте библиотеку MyToolkit:
http://mytoolkit.codeplex.com/wikipage?title=Http
источник
Клиент использует конвертировать файл в
ToBase64String
, после использования Xml, чтобы объявить вызов серверу, этот сервер используетFile.WriteAllBytes(path,Convert.FromBase64String(dataFile_Client_sent))
.Удачи!
источник
Этот метод работает для загрузки нескольких изображений одновременно
источник
Я понимаю, что, вероятно, действительно поздно, но я искал то же решение. Я нашел следующий ответ от представителя Microsoft
источник