-4

理念

我和一个朋友想和另一个朋友开个玩笑,并制作一个 delphi 应用程序,它可以截取我们朋友的屏幕截图,然后将其发送到我的计算机。

问题

问题是我和我的朋友不知道如何将图像发送到我的电脑。知道怎么做吗?

我已经尝试过 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,您可以在 Multipart Formdata 发布请求中发送图像。这与通过 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 访问的网络空间,则可以使用 IdFTP 或 WinInet FTP 功能。(我在这里使用 ADSL 连接获得了 100MB 的免费网络空间。)

于 2012-11-04T18:56:02.860 回答