从javascript发送时如何保存图像服务器端
我正在通过阅读一堆教程来制作拖放上传脚本,但它们只涵盖了javascript部分,我在php部分遇到了问题。
我正在上传一张图片:
$('#drop-zone').bind('drop', drop); function drop(e) { e.stopPropagation(); e.preventDefault(); e.dataTransfer = e.originalEvent.dataTransfer; traverseFiles(e.dataTransfer.files); }
traverseFiles为每个文件创建一个foreach循环并调用upload function,我这样做:
xhr = new XMLHttpRequest(); //some event listners for processing, on load xhr.open("post", "core/plugins/upload/upload.class.php", true); xhr.setRequestHeader("Content-Type", "multipart/form-data"); xhr.setRequestHeader("X-File-Name", file.name); xhr.setRequestHeader("X-File-Size", file.size); xhr.setRequestHeader("X-File-Type", file.type); xhr.send(file);
然后在PHP我发现使用这将得到我的图像的原始数据
$file = file_get_contents('php://input');
编辑:找到解决方案
$fh = fopen($savedir, 'w') or die("can't open file"); fwrite($fh, $file); fclose($fh);
假设您已经设法从PHP输入获取原始文件,它可能会被base64编码。 一个简单的例子就是这样做:
编辑请参阅注释,文件未作为请求的结果进行编码。
move_uploaded_file
不是你想要的。 如果您使用正常的POST请求(而不是通过Ajax)发送了该文件,那就是当您使用move_uploaded_file
。
$file
包含图像的原始二进制数据。 您所要做的就是将这些数据写入文件(注意正确处理换行符)并且您很高兴。 从fopen
开始,看看你有多远。
我假设已经使用二进制数据成功填充了$file
,并且您已经对此进行了测试。 如果没有,那么你在javascript方面遇到了另一个问题。
编辑:你也可能觉得这很有帮助。