Bir istemci tarafındaki tuval öğesinden bir PHP betiğine bir resim ve bazı form alanları gönderebilmek için $ _POST ve $ _FILES olarak bitebiliriz. Ben böyle gönderdiğinizde:
<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 ve $ _FILES hem doldurulan gel, ama $ _FILES görüntü veriler hala böyle deşifre gerekir: amacıyla ...
$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);
okunabilir bir PNG olarak kaydedin. Görüntüyü WordPress'in media_handle_upload() işlevine iletmeye çalıştığım bir seçenek değil, bu da okunabilir bir resme işaret eden $ _FILES dizinine ihtiyaç duyuyor. Güvenlik kontrollerinin faulüne düştüğü için, 'tmp_name' kodunu buna göre deşifre edemiyorum, değiştiremiyorum ve değiştiremiyorum.
Yani, bu bulundu: http://www.webtoolkit.info/javascript-base64.html ve istemci tarafında kod çözmeyi yapmaya çalıştım:
img_split = img.split(",",2)[1];
img_decoded = Base64.decode(img_split);
ama aldığında nedense hala okunabilir bir dosya ile sonunda yok
PHP. Yani soru şu: "Neden?" veya "Neyi yanlış yapıyorum?" veya "Bu mümkün mü?" :-)Herhangi bir yardım çok takdir!
sayesinde
Bir "Content-Transfer-Encoding: base64" kurar ve [bu yanıtı] (http://stackoverflow.com/questions/934012/get-image-data-in-javascript) adresine bakmak için önek, yine de test etmedim. – Wrikken
@Wrikken Content-Transfer-Kodlaması geçerli bir MIME üstbilgisi olmasına rağmen geçerli bir HTTP üstbilgisi değildir. Speklerin [bu ek] bölümüne bakın (http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.4.5). –
@Nathan: Ack, benim hatam. Bir dosya yüklemesini manuel olarak kurmaya hiç gerek duymadığımmı gösteriyor mu? :) – Wrikken