从 c sharp 客户端应用程序上传到 PHP 服务器

2022-08-30 23:36:29

目前我有一个c sharp应用程序(客户端应用程序)。和一个编写php的Web应用程序。我想在客户端执行特定操作时传输一些文件。这是将文件上传到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); 
}

这是上传.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");
 }

我没有从上面的代码中得到任何错误。但它似乎没有工作。这是为什么呢?我错过了什么吗?


答案 1

您当前的 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

我已经用你的C#代码测试了上面的PHP代码,它工作得很好。


答案 2

您的php代码似乎是正确的,但是您尝试使用$ _FILES全局的“picture”键访问该文件。它似乎没有在您的 csharp 代码中指定。我不知道该怎么做。你可以尝试通过对你的$_FILE全局或使用array_keys函数进行print_r或vardump来查看它在php中是如何命名的。

问候

编辑:我发现这个链接可以帮助您为上传的文件添加“名称”:http://www.bratched.com/en/home/dotnet/69-uploading-multiple-files-with-c.html


推荐