В настоящее время у меня острое приложение (клиентское приложение). и веб-приложение, написанное 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