ab(ApacheBench)图像上传和PHP $ _FILES - 临时文件保存为base64文本

问题描述 投票:1回答:2

我正在使用ApacheBench来对PHP图像上传模块进行基准测试。事情是,当我转储$_FILES["my_file"]时,我可以看到PHP存储的临时文件不是图像文件,它是base64(text / plain)文件。鉴于POST请求告诉它上传文件的内容类型是image/jpeg,PHP不应该将该文件存储为图像文件吗?或者PHP是否按预期运行,我的工作是处理$_FILES["my_file"]["tmp_name"]中的二进制数据?

这是我如何运行ab:

$>ab -v 4 -n 10 -c 2 -p /home/post_data.txt -T "multipart/form-data;\
boundary=1234567890" http://localhost/image_upload

这是/home/post_data.txt的内容:

--1234567890
Content-Disposition: form-data; name="token"
Content-Type: text/plain

1
--1234567890
Content-Disposition: form-data; name="text"
Content-Type: text/plain

Testing
--1234567890
Content-Disposition: form-data; name="status"
Content-Type: text/plain

1
--1234567890
Content-Disposition: form-data; name="uploaded_file"; filename="my_image.jpg"
Content-Type: image/jpeg
Content-Transfer-Encoding: binary

[[base64 image data]]
--1234567890--

[请注意,我尝试删除"Content-Type: text/plain",但它似乎没有区别]

谢谢!

php post base64 image-uploading apachebench
2个回答
1
投票

我终于放弃了这个:PHP忽略了标题(Content-Transfer-Encoding),我最终得到一个包含大量二进制数据而不是图像文件的文本文件。

不是AB的错......


0
投票

我设法通过直接将图像二进制文件添加到post_data文件来执行任务。

cat image.jpeg >> post_data

post_data文件的内容如下所示。

--123456789
Content-Disposition: form-data; name="file"; filename="image.jpg"
Content-Type: image/jpeg

"binary content goes here"
--123456789

并确保您的post_data具有CRLF文件结束而不是LF。

© www.soinside.com 2019 - 2024. All rights reserved.