【问题标题】:Capturing a file POSTed to PHP without writing to disk捕获发布到 PHP 的文件而不写入磁盘
【发布时间】:2014-03-14 19:10:43
【问题描述】:

有没有办法让 PHP 捕获正在上传(POST)的文件,以便 PHP 可以在文件写入磁盘之前对其进行操作?

示例应用程序:用户可以将文件上传到我的 Web 应用程序的表单,我的应用程序在将文件写入磁盘之前使用 PGP 对其进行加密。

【问题讨论】:

    标签: php file-upload file-io


    【解决方案1】:

    上传的文件会被 PHP 存储为临时文件,直到您对其进行操作(请参阅http://www.php.net/manual/en/features.file-upload.post-method.php)。您可以使用 INI 设置来控制文件的存储位置,但在将它们写入临时位置之前,您无法真正拦截它们。

    您当然可以在将文件移动到最终位置之前对其进行 PGP 加密。

    【讨论】:

    • 对。有没有办法使用 PHP 直接处理原始上传数据流而不是使用文件上传“功能”?
    【解决方案2】:

    根据您在前端使用的库,应该可以对文件进行 base64 编码,然后将其作为常规 post 数据发送到 PHP,从而避免将文件写入磁盘。当然,这会增加开销,并且您最终会以这种方式通过网络发送更多数据。但是,它可以工作(我已经做到了,但由于额外的带宽使用而放弃了这个想法)。

    您的后端需要正确解码数据并从那里进行处理。如果您这样做,我建议您将数据分块,这样您就可以重试失败的部分,而无需再次上传整个文件。

    【讨论】:

    • 为了确保我理解您的建议:您是说使用 javascript 对文件进行 base64 编码,然后获取结果并将其提交给后端,就好像它是常规的内容一样textarea(好像用户对文件进行了 base64 编码并将其粘贴到表单字段中。)我这样做对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2010-11-01
    • 1970-01-01
    相关资源
    最近更新 更多