将图像上传到网页

时间:2015-01-27 22:41:30

标签: php http binary autoit

我想将图片上传到PHP页面。我试过base64编码。然后我尝试了WinHTTP。代码如下。问题是什么?或者有不同的方法吗?

AutoIt代码:

#include <ScreenCapture.au3>
$sScreenShotFile = @TempDir & "\ScreenShot.png"
$hScreenShot = _ScreenCapture_Capture($sScreenShotFile)

$hfile = FileOpen($sScreenShotFile, 16)
$sData = FileRead($hfile)

$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oRequest.Open('POST', 'http://example.com/index.php', 0)
$oRequest.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
$oRequest.Send('screenshot=' & $sData)

PHP代码:

<?php

if(isset($_POST['screenshot']) && !empty($_POST['screenshot'])){
    $file = fopen(dirname(__FILE__) . "/screenshot.png", "w+b");
    fwrite($file, pack("H*" ,$_POST['screenshot'])); 
    fclose($file);
}

?>

图片上传但内容不一样。我想二进制转换有问题。我使用此AutoIt代码打开二进制文件:

$hfile = FileOpen($sScreenShotFile, 16)

发送后我转换为字符串并在PHP中保存到文件:

$file = fopen(dirname(__FILE__) . "/screenshot.png", "w+b");

代码运行并创建文件,但内容传输不正确。

enter image description here

1 个答案:

答案 0 :(得分:0)

根据{{​​3}}

AutoIt:

  

内容类型“application/x-www-form-urlencoded”效率低下   用于发送大量二进制数据或包含的文本   非ASCII字符。内容类型“multipart/form-data”应为   用于提交包含文件,非ASCII数据和表单的表单   二进制数据。

PHP :请勿转换(尝试使用pack()),因为fopen()是使用'b'调用的(强制二进制模式)。