আমি একটি জেনারেটর আর্ট প্রকল্পে কাজ করছি যেখানে আমি ব্যবহারকারীদের একটি অ্যালগরিদম থেকে ফলাফলগুলি সংরক্ষণ করতে দিতে চাই to সাধারণ ধারণাটি হ'ল:
- জেনারেটরি অ্যালগরিদম ব্যবহার করে এইচটিএমএল 5 ক্যানভাসে একটি চিত্র তৈরি করুন
- চিত্রটি সম্পূর্ণ হয়ে গেলে, ব্যবহারকারীদের সার্ভারে ইমেজ ফাইল হিসাবে ক্যানভাস সংরক্ষণ করার অনুমতি দিন
- ব্যবহারকারীকে হয় হয় চিত্রটি ডাউনলোড করতে বা এ্যালগোরিদম ব্যবহার করে উত্পাদিত টুকরোগুলির গ্যালারীটিতে যুক্ত করতে।
তবে আমি দ্বিতীয় ধাপে আটকে আছি। গুগলের কাছ থেকে কিছু সহায়তার পরে, আমি এই ব্লগ পোস্টটি পেয়েছি , যা দেখতে আমি ঠিক চাইছিলাম বলে মনে হয়েছিল:
যা জাভাস্ক্রিপ্ট কোডে নেতৃত্ব দিয়েছে:
function saveImage() {
var canvasData = canvas.toDataURL("image/png");
var ajax = new XMLHttpRequest();
ajax.open("POST", "testSave.php", false);
ajax.onreadystatechange = function() {
console.log(ajax.responseText);
}
ajax.setRequestHeader("Content-Type", "application/upload");
ajax.send("imgData=" + canvasData);
}
এবং সম্পর্কিত পিএইচপি (testSave.php):
<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {
$imageData = $GLOBALS['HTTP_RAW_POST_DATA'];
$filteredData = substr($imageData, strpos($imageData, ",") + 1);
$unencodedData = base64_decode($filteredData);
$fp = fopen('/path/to/file.png', 'wb');
fwrite($fp, $unencodedData);
fclose($fp);
}
?>
তবে এটি মোটেও কিছু করবে বলে মনে হয় না।
আরও গুগলিং এই ব্লগ পোস্টটিকে সক্রিয় করেছে যা পূর্ববর্তী টিউটোরিয়ালটির ভিত্তিতে রয়েছে। খুব আলাদা নয়, তবে সম্ভবত চেষ্টা করার মতো:
$data = $_POST['imgData'];
$file = "/path/to/file.png";
$uri = substr($data,strpos($data, ",") + 1);
file_put_contents($file, base64_decode($uri));
echo $file;
এটি একটি ফাইল তৈরি করে (ইয়ে) তবে এটি দূষিত এবং এতে কোনও কিছুই রয়েছে বলে মনে হয় না। এটি খালি বলে মনে হয় (ফাইলের আকার 0)।
সত্যিই কি এমন কিছু স্পষ্ট আছে যে আমি ভুল করছি? আমি যেখানে আমার ফাইলটি সংরক্ষণ করছি সেগুলি লিখিতযোগ্য, সুতরাং এটি কোনও সমস্যা নয়, তবে কিছুই ঘটছে বলে মনে হচ্ছে না এবং এটি কীভাবে ডিবাগ করা যায় তা আমি সত্যই নিশ্চিত নই।
সম্পাদন করা
সালভিডর ডালির লিঙ্কটি অনুসরণ করে আমি আজকের অনুরোধটি পরিবর্তিত করেছি:
function saveImage() {
var canvasData = canvas.toDataURL("image/png");
var xmlHttpReq = false;
if (window.XMLHttpRequest) {
ajax = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
ajax.open("POST", "testSave.php", false);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.onreadystatechange = function() {
console.log(ajax.responseText);
}
ajax.send("imgData=" + canvasData);
}
এবং এখন চিত্র ফাইলটি তৈরি হয়েছে এবং খালি নেই! দেখে মনে হচ্ছে বিষয়বস্তুর ধরণটি x-www-form-urlencoded
ইমেজ ডেটা প্রেরণের অনুমতি হিসাবে এটি পরিবর্তন করে ।
কনসোলটি বেস 64 এর (বরং বৃহত্তর) স্ট্রিংটি দেয় এবং ডেটাফাইলে 140 ডলার কেবি হয়। যাইহোক, আমি এখনও এটি খুলতে পারি না এবং এটি কোনও চিত্র হিসাবে ফর্ম্যাট করা হয়নি বলে মনে হয়।
$data
দ্বিতীয় পিএইচপি কোডে) আমি ফিরে পাই তা খালি লাইন। কেন হবে? দেখে মনে হচ্ছে সম্ভবত পাঠানো ডেটাটি সঠিক নয়, তবে এটি প্রদর্শিত হচ্ছে উদাহরণগুলি দেখানোর মতোই এটি পাঠাচ্ছি ...
DataUriUpload
পরিবর্তে এর উপাদানটির সাথে পিএইচপি-ফাইলআপলোড ব্যবহার করে আরও শক্তিশালী করা যায়। এটি এখানে নথিভুক্ত করা হয়েছে এবং বৈধতা এবং সুরক্ষা কার্যকর করার জন্য অতিরিক্ত কয়েকটি উপায় নিয়ে আসে।
ajax.send(canvasData );
সময় আপনি এটি পছন্দ করেনajax.send("imgData="+canvasData);
। অতএব$GLOBALS["HTTP_RAW_POST_DATA"]
আপনি যা প্রত্যাশা করেন তা হবেনা, আপনার সম্ভবত ব্যবহার করা উচিত$_POST['imgData']
।