如何接收未作为multipart / form发送的上传文件? PHP

时间:2016-02-22 10:43:48

标签: php file-upload content-type

我从第三方获得了通过http协议向我发送文件的文档,我需要编写一个成功接收发送文件的脚本。内容类型设置为application/gzip,因此我无法使用$_FILES变量获取上传的文件,因为使用multipart/form-data会很容易。

这个链接给了我一个提示:http://php.net/manual/en/features.file-upload.post-method.php

  

注意:   请确保您的文件上传表单具有enctype =“multipart / form-data”属性,否则文件上传将无效。

我尝试使用以下网址http://blog.derakkilgo.com/2009/06/07/send-a-file-via-post-with-curl-and-php/

中的示例重现他们的“客户端”以测试我的服务器

为了确保可以使用跨域发布,我使用了@slashingweapon CORS with php headers

发布并解释的功能

必须有办法 - Halp!

2 个答案:

答案 0 :(得分:0)

您知道的是,您只需要下载已上传到服务器的文件,尝试使用以下代码以二进制模式获取文件:

ftp_fget($conn_id, $file, FTP_BINARY, 0);

参考:http://php.net/manual/en/function.ftp-get.php

共享文件的第三方必须与您共享连接详细信息。

答案 1 :(得分:0)

感谢@ fusion3k指出了正确的方向。

$rawData = file_get_contents("php://input")给出了我必须从中解析文件的RAW数据。提取它是很痛苦的,因为它是一个二进制文件。我用了

  1. 使用" \ n"爆炸数据作为分隔符$rawData = explode("\n", $rawData)
  2. 跳过前几行(我的标题数据是3行),其余的一行是$valuableData
  3. 使用$convertedLine = unpack("H*", $valuableData[count($valuableData)-1])
  4. 将最后一行数据从字符串转换为二进制
  5. 从最后一行$convertedLine[1] = substr($convertedLine[1], 0, -2)中删除数据的最后一个字节(不知道为什么`unpack返回一个数组)
  6. $valuableData[count($valuableData)-1] = pack("H*", $convertedLine[1])
  7. implode("\n", $valuableData)并将其写入文件