Php 使用 xmlhttprequest 上传文件
Php file upload using xmlhttprequest
我对使用xmlhttprequest真的很困惑。我想向服务器发送一个文件。是否有必要使用formdata来发送文件。我正在尝试使用 xmlhttprequest 直接发送。我没有得到一个文件,而是在服务器端只得到一个文本。
var Stu_Image = localStorage.getItem('StuImage');
alert(Stu_Image);
nImageRequest[i] = new XMLHttpRequest();
nImageRequest[i].open("POST", "http://10.xxx.xx.xx/server/api/upload_image.php", true);
// var ImageFile = new Image();
ImageFile = "image="+Stu_Image;
nImageRequest[i].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
alert(ImageFile);
nImageRequest[i].onreadystatechange = function (oEvent)
{
if (nImageRequest[i].readyState == 4)
{
alert("4 status:"+ nImageRequest[i].status+"-------"+ nImageRequest[i].statusText);
if (nImageRequest[i].status == 200)
{
alert(nImageRequest[i].responseText);
return;
}
else
{
alert("Error:"+ nImageRequest[i].statusText);
}
}
else
{
alert("Error:"+ nImageRequest[i].readyState +"----"+nImageRequest[i].statusText);
}
};
nImageRequest[i].send(ImageFile);
这是我的 php 文件
header("Access-Control-Allow-Origin: *");
$data = $_POST['image'];
//$data = $_FILES['image']['name'];
echo "".$data;
$fileData = base64_decode($data);
echo ".....".$fileData;
$uploads_dir = "server/api/uploads/";
move_uploaded_file($fileData, $uploads_dir);
if(!file_exists($fileData) || !is_uploaded_file($fileData))
{
//echo "";
echo "No upload";
}
else
{
echo "uploaded";
}
我就是这样得到的Stu_Image
function loadImage(Value)
{
var reader = new FileReader();
reader.readAsDataURL(document.getElementById("LoadImage").files[0]);
ImgFile = document.getElementById("LoadImage").files[0];
/
// alert(ImgFile);
localStorage.setItem('StuImage',ImgFile);
alert(ImgFile);
// alert(url);
reader.onload = function (Event)
{
document.getElementById("PreviewImage").src = Event.target.result;
};
};
好的,所以在浪费了几天之后,我得到了这个问题的答案。如果 he/she 被卡住 here.I 不是 post 代码,我希望答案对某人有所帮助,因为它非常大。在发送到服务器之前我没有对图像进行编码。
所以正确的方法是
1 将图像存储在 Canvas。
2 使用 canvas.toDataURL 方法对其进行编码并使用 xmlhttprequest 发送。
3 将其解码为服务器端。我使用 php 函数 base64_decode 来做到这一点。
4 使用imagecreatefromstring()方法将解码后的字符串转换为图片,然后使用imagejpeg()或imagepng()方法获取图片。
希望对大家有所帮助。如果有人需要,很高兴 post 编码。
我对使用xmlhttprequest真的很困惑。我想向服务器发送一个文件。是否有必要使用formdata来发送文件。我正在尝试使用 xmlhttprequest 直接发送。我没有得到一个文件,而是在服务器端只得到一个文本。
var Stu_Image = localStorage.getItem('StuImage');
alert(Stu_Image);
nImageRequest[i] = new XMLHttpRequest();
nImageRequest[i].open("POST", "http://10.xxx.xx.xx/server/api/upload_image.php", true);
// var ImageFile = new Image();
ImageFile = "image="+Stu_Image;
nImageRequest[i].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
alert(ImageFile);
nImageRequest[i].onreadystatechange = function (oEvent)
{
if (nImageRequest[i].readyState == 4)
{
alert("4 status:"+ nImageRequest[i].status+"-------"+ nImageRequest[i].statusText);
if (nImageRequest[i].status == 200)
{
alert(nImageRequest[i].responseText);
return;
}
else
{
alert("Error:"+ nImageRequest[i].statusText);
}
}
else
{
alert("Error:"+ nImageRequest[i].readyState +"----"+nImageRequest[i].statusText);
}
};
nImageRequest[i].send(ImageFile);
这是我的 php 文件
header("Access-Control-Allow-Origin: *");
$data = $_POST['image'];
//$data = $_FILES['image']['name'];
echo "".$data;
$fileData = base64_decode($data);
echo ".....".$fileData;
$uploads_dir = "server/api/uploads/";
move_uploaded_file($fileData, $uploads_dir);
if(!file_exists($fileData) || !is_uploaded_file($fileData))
{
//echo "";
echo "No upload";
}
else
{
echo "uploaded";
}
我就是这样得到的Stu_Image
function loadImage(Value)
{
var reader = new FileReader();
reader.readAsDataURL(document.getElementById("LoadImage").files[0]);
ImgFile = document.getElementById("LoadImage").files[0];
/
// alert(ImgFile);
localStorage.setItem('StuImage',ImgFile);
alert(ImgFile);
// alert(url);
reader.onload = function (Event)
{
document.getElementById("PreviewImage").src = Event.target.result;
};
};
好的,所以在浪费了几天之后,我得到了这个问题的答案。如果 he/she 被卡住 here.I 不是 post 代码,我希望答案对某人有所帮助,因为它非常大。在发送到服务器之前我没有对图像进行编码。
所以正确的方法是
1 将图像存储在 Canvas。
2 使用 canvas.toDataURL 方法对其进行编码并使用 xmlhttprequest 发送。
3 将其解码为服务器端。我使用 php 函数 base64_decode 来做到这一点。
4 使用imagecreatefromstring()方法将解码后的字符串转换为图片,然后使用imagejpeg()或imagepng()方法获取图片。
希望对大家有所帮助。如果有人需要,很高兴 post 编码。