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

Cra*_*aig -4 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;
Run Code Online (Sandbox Code Playgroud)

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

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

Gol*_*rol 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;
Run Code Online (Sandbox Code Playgroud)

对于服务器,您可以使用任何允许保存文件的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.
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 你需要包含单位`IdMultipartFormDataStream`.但我期望对Delphi本身有一些基本的了解.你也会遇到其他一些问题,但我不打算在这里的评论中逐一回答. (2认同)