-4

アイデア

私と友人は、別の友人に冗談を言って、友人の画面のスクリーンショットを撮り、それを私のコンピューターに送信するデルファイアプリケーションを作成したいと考えています。

質問

問題は、私と私の友人が画像を私のコンピューターに送信する方法がわからないことです。どのようにアイデアはありますか?

GolezTrolが言ったことを試しました

これはそのためのコードです(27行目から始まります)

 procedure TForm1.Button1Click(Sender: TObject);
 var
   Params:  TIMultipartFormDataStream;
   Response1: TStringStream;
 begin
  try
    Params := TIMultipartFormDataStream.create;
    Response1 := TStringStream.Create;
    try
      Params.AddFile('file', 'C:\temp\YourTempImageName.jpg', 'image/jpg');
      IdHTTP1.Post('http://localhost/uploadimage.php', Params, Response1);
    finally
      Params.Free;
      Response1.Free;
    end;
end;

(私はそれを機能させるために忙しいです。)

追加情報 再考した後、私はもう面白い面を見ていません。ちなみに、友達のアイデンティティを固めるつもりはありませんでした。私たちが何をしたいのかを彼に伝えた後、彼は私たちに試してみるように挑戦しました(彼は私たちがそれをすることができなかったに違いありません)。

4

2 に答える 2

6

HTTPを介して、MultipartFormdataPOSTリクエストで画像を送信できます。これは、HTMLフォームを介して画像をアップロードする場合と同じ種類のリクエストです。サーバーは違いを知りません。:)

アップロードはとても簡単です。ファイルを追加するためのメソッドを持つMultipartFormDataStreamを作成します。次に、TIdHTTPを使用して送信できます。実行時に作成できますが、Indyコンポーネントがインストールされている場合は、フォームにドロップすることもできます。私はそうしました、そしてそれをデフォルトの名前で残しましたIdHTTP1

この例では、ディスクからファイルをロードしますが、ストリームから直接ロードできる場合があります。私はそれを試していませんが、一時ファイルをロードすることでうまくいくと思います。

クライアントのDelphiコード:

var
  Params: TIdMultipartFormDataStream;
  Response: TStringStream;
begin
  try
    Params := TIdMultipartFormDataStream.Create;
    Response := TStringStream.Create;
    try
      Params.AddFile('file', 'C:\temp\YourTempImageName.jpg', 'image/jpg');

      // Substiture real url below.
      IdHTTP1.Post('http://localhost/uploadimage.php', Params, Response);

      // For testing purposes, you may show the response.
      //Memo1.Text := Response.DataString;
    finally
      // Free resources. Important if you want your app to keep running
      // without being noticed.
      Params.Free;
      Response.Free;
    end;
  except
    // Log exception for testing. Don't let it show to the 'friend'.
    //on e: Exception d
    //  Memo1.Lines.Add(e.Message);
  end;
end;

サーバーには、ファイルの保存を許可する任意のPHP対応サーバーを使用できます。以下に最小限の例を示します。もちろん、Delphiを含む他の言語でサーバーソフトウェアを書くこともできます。ただし、Delphiで作成する場合は、常に利用可能なWindowsサーバーが必要になります。

サーバーのPHPコードの例:

<?php
if (isset($_FILES['file']) && $_FILES['file']['error'] == UPLOAD_ERR_OK)
{
  // Choose your proper directory here.
  $target = 'C:\\ff\\uploads\\' . time();
  $result = move_uploaded_file($_FILES['file']['tmp_name'], $target);
  if (!$result) {
    echo 'Cannot copy'; // This response is sent to the client.
  }
}
于 2012-11-04T19:05:32.330 に答える
1

FTP経由でアクセスできるWebスペースがある場合は、IdFTPまたはWinInetFTP関数を使用できます。(私はここにあるADSL接続で100MBの無料ウェブスペースを手に入れました。)

于 2012-11-04T18:56:02.860 に答える