17

現在、私はacシャープアプリケーション(クライアントアプリ)を持っています。そして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");
 }

上記のコードからエラーは発生していません。しかし、それは機能していないようです。それはなぜです?私は何かが足りないのですか?

4

2 に答える 2

15

現在のPHPコードは複数のファイルのアップロードを処理するためのものですが、C#コードは1つのファイルのみをアップロードしています。

foreachループを削除して、PHPコードをいくらか変更する必要があります。

<?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#コードでテストしましたが、完全に機能しました。

于 2012-04-19T23:55:03.833 に答える
0

PHPコードは正しいように見えますが、$_FILESグローバルの「picture」キーを使用してファイルにアクセスしようとしています。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 に答える