Загрузка на сервер PHP из приложения с острым клиентом

В настоящее время у меня острое приложение (клиентское приложение). и веб-приложение, написанное php. Я хочу передать некоторые файлы всякий раз, когда конкретное действие выполняется на стороне клиента. Вот клиентский код для загрузки файла на php-сервер.

private void button1_Click(object sender, EventArgs e) { System.Net.WebClient Client = new System.Net.WebClient(); Client.Headers.Add("Content-Type", "binary/octet-stream"); byte[] result = Client.UploadFile("http://localhost/project1/upload.php", "POST", @"C:\test\a.jpg"); string s = System.Text.Encoding.UTF8.GetString(result, 0, result.Length); } 

Вот файл upload.php для перемещения файла.

 $uploads_dir = './files/'; //Directory to save the file that comes from client application. foreach ($_FILES["pictures"]["error"] as $key => $error) { if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; $name = $_FILES["pictures"]["name"][$key]; move_uploaded_file($tmp_name, "$uploads_dir/$name"); } 

Я не получаю никаких ошибок из кода выше. но он, похоже, не работает. Почему это? Я что-то упускаю?

Ваш текущий PHP-код предназначен для обработки нескольких загрузок файлов, но ваш код C # загружает только один файл.

Вам нужно немного изменить свой код PHP, удалив цикл foreach :

 <?php $uploads_dir = './files'; //Directory to save the file that comes from client application. if ($_FILES["file"]["error"] == UPLOAD_ERR_OK) { $tmp_name = $_FILES["file"]["tmp_name"]; $name = $_FILES["file"]["name"]; move_uploaded_file($tmp_name, "$uploads_dir/$name"); } ?> 

Вам также необходимо убедиться, что каталог ./files существует.

Я проверил вышеуказанный PHP-код с кодом C #, и он отлично работал.

  • Для получения дополнительной информации об обработке загрузки файлов см. Документацию по PHP .

  • Для получения дополнительной информации о загрузке нескольких файлов с помощью C # и PHP см. Следующие полезные ссылки:

    Загрузка файлов с помощью HTTPWebrequest (multipart / form-data)

    Использование массивов в переменных формы HTML

    PHP: загрузка нескольких файлов

    Если вам нужно что-то простое для загрузки нескольких файлов, вы просто просто загружаете один файл за один раз в upload.php в цикле C #.

Ваш php-код кажется правильным, однако вы пытаетесь получить доступ к файлу, используя ключ «picture» в глобальном файле $ _FILES. Это не похоже на ваш код csharp. Я не знаю, как это сделать. Вы можете попробовать посмотреть, как он был указан в вашем php, выполнив print_r или vardump из вас $ _FILE global или используя функцию array_keys

С уважением

Изменить: я нашел эту ссылку, которая может помочь вам добавить «имя» в загруженный файл: http://www.bratched.com/en/home/dotnet/69-uploading-multiple-files-with-c.html