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

Posted

技术标签:

【中文标题】从 c sharp 客户端应用程序上传到 PHP 服务器【英文标题】:Upload to PHP server from c sharp client application 【发布时间】:2012-05-01 13:15:21 【问题描述】:

目前我有一个 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); 

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

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

【问题讨论】:

您遇到了什么错误? @Baba 我没有收到任何错误。但是我的文件没有传输。 内容类型不应该是multipart/form-data吗? if ($_FILES["file"]["error"] == UPLOAD_ERR_OK) 替换if ($error == UPLOAD_ERR_OK) 如何使用这个传递 Post 变量数据? 【参考方案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 代码,它运行良好。

有关处理文件上传的更多信息,refer to the PHP documentation。

有关使用 C# 和 PHP 上传 多个 文件的更多信息,以下是一些有用的链接:

Upload files with HTTPWebrequest (multipart/form-data)

Use Arrays in html Form Variables

PHP: Uploading multiple files

如果您想简单地上传多个文件,只需在 C# 循环中一次上传一个文件到 upload.php

【讨论】:

完美运行 :) 非常感谢您的时间和贡献。希望它可以帮助其他人。 V.O.I.L.A【参考方案2】:

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

问候

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

【讨论】:

我刚刚将它指定为图片。实际上 $_FILES["pictures"]["error"] 代码是什么意思? 这个答案是错误的。问题中的 PHP 代码用于处理多个文件上传,并且仅在使用 &lt;input name="pictures[]" type="file" /&gt; 时有效。 是的,这是错误的。正如@Xenon 所说,它并不是要上传多个文件。 我没有链接这个来告诉你如何上传,只是我能找到的最快的东西来告诉你如何为上传的文件设置一个名字。Content-Disposition: form-data; name=\"0\"11"是我唯一想要展示的东西你。解释 $_FILE 是一个包含上传文件的全局数组。它是一个类似于 $_POST 或 $_GET 的全局数组。当您尝试访问这些数组中的值时,您会使用一个称为“名称”的键。就像 html 文件输入的氙气示例一样,设置了属性名称,并允许您访问具有相同名称的 $_FILE 数组。我在你的 c# 中看不到的东西。

以上是关于从 c sharp 客户端应用程序上传到 PHP 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何在nodejs中使用sharp调整图像大小然后使用multer上传

使用 node sharp 包调整图像大小并上传到 s3 时,它会旋转

csharp 和 c++ 之间的命名管道

使用 REST 在 php 中上传文件

C#(Sharp)操作数据库原理及案例精析(强烈建议收藏)

C#(Sharp)操作数据库原理及案例精析(强烈建议收藏)