Intereting Posts
Могу ли я войти в cPanel через PHP? Symfony2: проверка подлинности пользователя на основе пути Как легко загружать файлы без отправки формы (с помощью jQuery + AJAX) Получить элементы DOM по имени тега с помощью DOMDocument :: loadHTML и getElementsByTagName Как я могу остановить PHP от возврата заголовков при выполнении из командной строки? Алгоритмы для сходства строк (лучше, чем у Левенштейна и аналогичного текста)? Php, Js Анализ файла JavaScript через PHP Получить формат даты, например «Ymd H: i: s», с даты php zend формировать пользовательский атрибут в опции выбора? Использовать дважды запрос mysql_fetch_array Как запустить php в интерактивной CLI в Windows Может ли система авторизации Laravel использовать существующую базу данных? Зачем использовать dom для анализа веб-страниц вместо регулярного выражения? заселить выпадающее меню из базы данных в codeigniter PHP, получение переменной из другого php-файла

Загрузка двоичных данных с C # на PHP

Я хочу загрузить файлы из приложения Windows C # на веб-сервер под управлением PHP.

Мне известен метод WebClient.UploadFile, но я хотел бы загрузить файл в куски, чтобы я мог отслеживать прогресс и быть в состоянии приостановить / возобновить.

Поэтому я читаю часть файла и использую метод WebClient.UploadData.

Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как получить доступ к данным, отправленным с UploadData из php. Если я сделаю print_r на данных сообщения, я вижу, что есть двоичные данные, но я не знаю ключа для доступа к нему. Как я могу получить доступ к двоичным данным? Есть ли лучший способ, которым я должен заниматься этим вообще?

String file = "C:\\Users\\Public\\uploadtest\\4.wmv"; using (BinaryReader b = new BinaryReader(File.Open(file, FileMode.Open))) { int pos = 0; int required = 102400; b.BaseStream.Seek(pos, SeekOrigin.Begin); byte[] by = b.ReadBytes(required); using (WebClient wc = new WebClient()){ wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); byte[] result = wc.UploadData("http://192.168.0.52/html/application.php", "POST", by); String s = System.Text.Encoding.UTF8.GetString(result, 0, result.Length); MessageBox.Show(s); } } 

введите описание изображения здесь

Вот как я делаю свои HTTP-сообщения.

Я думаю, когда я дойду до using() , настроится HTTP-соединение, а внутри тела using() {...} вы можете сделать паузу и прочее.

 string valueString = "..."; string uriString = "http://someUrl/somePath"; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(uriString); httpWebRequest.Method = "POST"; string postData = "key=" + Uri.EscapeDataString(valueString); byte[] byteArray = Encoding.UTF8.GetBytes(postData); httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.ContentLength = byteArray.Length; using (Stream dataStream = httpWebRequest.GetRequestStream()) { // do pausing and stuff here by using a while loop and changing byteArray.Length into the desired length of your chunks dataStream.Write(byteArray, 0, byteArray.Length); } HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); Stream receiveStream = httpWebResponse.GetResponseStream(); StreamReader readStream = new StreamReader(receiveStream); string internalResponseString = readStream.ReadToEnd(); 

Но при загрузке файла вы, вероятно, должны использовать multipart/form-data вместо application/x-www-form-urlencoded . См. Также: http://www.php.net/manual/en/features.file-upload.post-method.php

В php вы можете использовать суперглобальную переменную $ _FILES (например, print_r($_FILES); ) для доступа к загруженному файлу.

Кроме того, прочтите следующее: https://stackoverflow.com/a/20000831/1209443 для получения дополнительной информации о том, как работать с multipart/form-data

Использовать это. Это будет работать точно. System.Net.WebClient Client = новый System.Net.WebClient ();

  Client.Headers.Add("Content-Type", "binary/octet-stream"); byte[] result = Client.UploadFile("http://192.168.0.52/mipzy/html/application.php", "POST", file); string s = System.Text.Encoding.UTF8.GetString(result, 0, result.Length); MessageBox.Show(s); 

Или тот, который использует

 using (System.Net.WebClient Client = new System.Net.WebClient()) { Client.Headers.Add("Content-Type", "binary/octet-stream"); byte[] result = Client.UploadFile("http://192.168.0.52/mipzy/html/application.php", "POST", file); string s = System.Text.Encoding.UTF8.GetString(result, 0, result.Length); MessageBox.Show(s); } 

Без бинарного считывателя. Если вы хотите использовать бинарный считыватель, вы также должны предоставить несколько параметров для формы. Это автоматически делается с помощью этой функции UploadFile.