如何将文本附加到Web服务器上的文件?

时间:2013-04-30 21:26:43

标签: delphi indy freepascal

我正在使用Lazarus 1.0.8(最新版本),我已经安装了Indy 10.我还有一个带有PHP脚本的网站,可以在服务器上保存一个文本文件(称为“stats.txt”)。我希望,使用我的程序,上传另一个包含统计信息文本的文本文件+我在备忘录中写的新文本。我不想让你为我写代码,你能不能给我一个关于我怎么办的建议呢?

我在想我可以在备忘录上下载“stats.txt”的内容,然后再次上传,但添加新文本。还有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

执行此操作的最佳方式取决于服务器提供的功能。如果服务器具有某种“附加”命令,则可以使用该命令和新文本发出请求,并让服务器更新其数据。查看服务器软件的文档。

它可能提供一个可以使用POST命令发送数据的URL。 Indy的TIdHTTP组件有Post方法;您可以提供URL和文本数据,它将负责建立HTTP连接,发送数据和解释任何响应。


如果服务器仅提供查询整个文本并接收整个文本的方法,那么您别无选择,只能执行问题中描述的内容:下载所有数据,在本地修改,然后更新服务器。 / p>

获取当前版本的数据可能涉及GET请求。 Indy的TIdHTTP组件提供了几种Get方法,这些方法可以获取URL并以字符串或流方式返回数据。

一旦修改了数据,您可能会发现可以发出POST请求,或者PUT,并包含更新的数据。

答案 1 :(得分:2)

问题在这里有两个部分:你如何通过HTTP上传文件,以及如何使用Lazarus实现这一目标?我们一次拿一个。

您通过发送POST请求并使用MIME多部分表单编码对文件进行编码来上传HTTP文件。这是一个特殊的协议,专门用于通过HTTP上传文件,这是服务器所期望的。

那么,如何使用多部分表单编码设置HTTP请求?你说你正在使用Indy 10,所以看看TIdMultiPartFormDataStream单元中的IdMultipartFormData类。一旦你查看了类的接口,它应该很简单,并且TidHTTP.Post()方法的重载接受TIdMultiPartFormDataStream对象作为输入。