17

目前我有交流应用程序(客户端应用程序)。和一个用 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); 
}

这是用于移动文件的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");
 }

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

4

2 回答 2

15

您当前的 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 代码,它运行良好。

于 2012-04-19T23:55:03.833 回答
0

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

问候

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

于 2012-04-19T23:21:05.130 回答