Загрузить изображение на веб-страницу

Я хочу загрузить изображение на страницу 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");

Код выполняется, и файлы создаются, но содержимое передается неправильно.

введите описание изображения здесь

0

Решение

AutoIt: согласно W3C HTML 4.01 Спецификация:

Тип контента «application/x-www-form-urlencoded«неэффективно
для отправки большого количества двоичных данных или текста, содержащего
не-ASCII символы. Тип контента «multipart/form-data» должно быть
используется для отправки форм, содержащих файлы, данные, не входящие в ASCII, и
двоичные данные.

PHP: Не конвертировать (попытка использования pack()) поскольку fopen() называется с помощью 'b' (форсируя бинарный режим).

0

Другие решения

Других решений пока нет …