2

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

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

4

2 回答 2

4

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

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


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

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

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

于 2013-04-30T21:36:48.213 回答
2

这里的问题有两个部分:如何通过 HTTP 上传文件,以及如何使用 Lazarus 完成该任务?让我们一次拿一个。

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

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

于 2013-04-30T21:35:45.477 回答