【问题标题】:How do I append text to a file on a Web server?如何将文本附加到 Web 服务器上的文件?
【发布时间】:2013-04-30 21:26:43
【问题描述】:

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

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

【问题讨论】:

  • 你是在问如何做服务器部分,还是只做客户端?
  • 不,我只需要知道如何上传文本文件。我刚刚下载了 Indy,所以我想要一个建议
  • 不要听他们的 :p 他们确实建议使用 POST 方法,因为他们不知道正确的工具 - PUT 方法:)
  • 你指的是“他们”,@User539484?当然不是我,我清楚地表明了对 PUT 方法的认识。但是,使用它需要提供该方法的服务器,这不像 GET 和 POST 那样普遍。正如我在回答中所说,这完全取决于服务器允许的内容。
  • @Rob Kennedy,但您是从 POST 推测开始的。 PUT 是基准 HTTP。 OP 的要求不是最理想的,但很明确:获取一个文件,处理它,然后放回去。

标签: delphi indy freepascal


【解决方案1】:

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

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


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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我的问题是,当我将例如 IdStream 放在使用中或任何其他 indy libraby 中时,我遇到了来自 lazarus 的错误。你认为我必须重新安装软件包吗?
    • 如果没有比“我有来自 Lazarus 的错误”更多的信息,我真的无法回答。
    • 是的,抱歉。 IDE 对我说“找不到 Unit1 使用的单元 IdStream。”
    • @Alberto:那么您需要检查您的搜索路径。这意味着编译器没有在包含 IdStream 的文件夹中查找。
    • @MasonWheeler:Indy 的 TIdHTTP 组件具有单独的 Get()Post()Put() 方法,分别用于 HTTP GETPOSTPUT 请求。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2014-09-04
    • 1970-01-01
    • 2011-10-14
    • 2017-12-09
    相关资源
    最近更新 更多