클라이언트 측 캔버스 요소의 이미지와 양식 필드를 $ _POST 및 $ _FILES로 끝나는 PHP 스크립트로 보낼 수 있어야합니다. 나는이처럼 보낼 때 :
는<script type="text/javascript">
var img = canvas.toDataURL("image/png");
...
ajax.setRequestHeader('Content-Type', "multipart/form-data; boundary=" + boundary_str);
var request_body = boundary + '\n'
+ 'Content-Disposition: form-data; name="formfield"' + '\n'
+ '\n'
+ formfield + '\n'
+ '\n'
+ boundary + '\n'
+ 'Content-Disposition: form-data; name="async-upload"; filename="'
+ "ajax_test64_2.png" + '"' + '\n'
+ 'Content-Type: image/png' + '\n'
+ '\n'
+ img
+ '\n'
+ boundary;
ajax.send(request_body);
</script>
$ _POST와 $ _FILES 모두 채워 돌아올하지만, $ _FILES의 이미지 데이터는 여전히 같은 디코딩이 필요 :하기 위해 ...
$loc = $_FILES['async-upload']['tmp_name'];
$file = fopen($loc, 'rb');
$contents = fread($file, filesize($loc));
fclose($file);
$filteredData=substr($contents, strpos($contents, ",")+1);
$unencodedData=base64_decode($filteredData);
그것을 읽을 수있는 PNG로 저장하십시오. 이것은 이미지를 Wordpress의 media_handle_upload() 함수에 전달하려고 시도하기 때문에 옵션이 아닙니다.이 함수는 읽을 수있는 이미지를 가리키는 $ _FILES에 대한 인덱스가 필요합니다. 나는 또한 보안 검사에 위배되기 때문에 'tmp_name'을 디코딩, 저장 및 변경할 수 없다.
그래서, 나는이 발견 http://www.webtoolkit.info/javascript-base64.html 를 클라이언트 측에서 디코딩을 시도 :
img_split = img.split(",",2)[1];
img_decoded = Base64.decode(img_split);
하지만가 오면 어떤 이유로 난 여전히 읽을 수있는 파일로 끝나지 않는
PHP. 그래서 질문은 "왜?" 또는 "나는 뭘 잘못하고 있니?" 또는 "이것이 가능합니까?" :-)도움을 주시면 대단히 감사하겠습니다!
감사합니다,
'Content-Transfer-Encoding : base64'를 설정하고 [이 답변] (http://stackoverflow.com/questions/934012/get-image-data-in-javascript)에서 접두사, 비록 그것을 테스트하지 않았습니다. – Wrikken
@Wrikken Content-Transfer-Encoding은 유효한 MIME 헤더가 유효한 HTTP 헤더가 아니지만. 이 사양의 [이 부록 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.4.5)]을 참조하십시오. –
@ 네이선 : 아, 내 실수. 파일 업로드를 수동으로 빌드 할 필요가 없다는 것을 보여줍니까? – Wrikken