在Delphi 7中通过互联网发送图片

时间:2012-11-04 17:25:13

标签: delphi delphi-7

理念

我和一个朋友想和另一个朋友开个玩笑,然后制作一个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;

(我正忙着努力让它发挥作用。)

额外信息 重新考虑之后,我再也看不到有趣的一面了。顺便说一下,我不打算把我的朋友身份搞得一团糟。在告诉他我们想做什么后,他向我们提出了尝试(他打赌我们做不到)。

2 个答案:

答案 0 :(得分: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.
  }
}

答案 1 :(得分:1)

如果您有一些可通过FTP访问的Web空间,则可以使用IdFTP或WinInet FTP功能。 (我通过ADSL连接获得了100MB的免费网络空间。)