从javascript发送blob到php并将其保存为服务器

时间:2018-03-21 08:35:19

标签: javascript php server xmlhttprequest blob

我使用Three.js导入了一些Geometry,并希望将有效的二进制.stl文件从它导出到我们的服务器。 Filesaver(Filesaver.js)创建的blob生成了一个有效文件,可以在下载时预览。到目前为止......

为了将其保存到服务器,我创建了一个formData对象,并将filename,dataURL和我的blob附加到它。要将其发送到服务器,单击一个按钮时将执行此JS函数。

function exportSTL(){

 var export_stl = new THREE.STLBinaryExporter();
 var sceneEx = new THREE.Scene();
 var model = new THREE.Object3D();
 model.add(frame.getObjectByName("base_surf").clone());
 model.add(frame.getObjectByName("logo_front_surf").clone());
 model.add(frame.getObjectByName("logo_back_surf").clone());
 model.add(frame.getObjectByName("new_text_mesh").clone());
 model.add(frame.getObjectByName("text_surf").clone());
 sceneEx.add(model);

 var output = export_stl.parse(sceneEx);
 var blob = new Blob([output] , {type: "application/vnd.ms-pki.stl"});
 //saveAs(blob, filename);

 var objectURL = URL.createObjectURL(blob);
 console.log(objectURL);
 var filename = "-" + ".stl";
 var data = new FormData();
 data.append('name', filename);
 data.append('tmp_name', objectURL);
 data.append('data', blob);

 var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new activeXObject("Microsoft.XMLHTTP");
 xhr.open( 'post', 'index.php', true);
 xhr.send(data);
}

我的php文件如下所示:

<?php
 if(!empty($_POST['data'])){
     $data = $_POST['data'];
     $fname = $_POST['name'];
     $fileBlob = $_FILES['data'];
     $tmpPath = $fileBlob['tmp_name']; 
     file_put_contents('/www/htdocs/w0132394/konfig.project-samsen.com/stl/' + $fname , $content); 
 }
?>

当我这样做时,我的文件夹中没有文件:/当我只传递一个字符串时,我已经能够将文本写入文件,因此应该为目标文件夹正确设置所有权限。当我尝试使用JSON.stringify()解码JS中的二进制数据并传递它时,它工作正常,但保存的文件不再有效。

那么这里有什么问题?我正在寻找解决方案几天并尝试了几件事,但没有进一步......:/

我在这里缺少什么?任何人都可以帮助我吗?

THX 迈克尔

1 个答案:

答案 0 :(得分:0)

$ content未定义 也可以使用而不是使用file_put_contents https://secure.php.net/manual/en/function.move-uploaded-file.php