从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方面遇到了另一个问题。

编辑:你也可能觉得这很有帮助。