我使用angularJS和PHP上传文件。从angularJS第一部分发送一个像这样的blob网址:
{
$ngfBlobUrl: "blob:http://test.dev/91458ff7-fc18-4bbc-8dae-f06941e0a1c9"
selectedCategory: "1",
name: "some_file_name.pdf"
}
在PHP方面我尝试从blob url获取文件并将其保存在本地存储中。
这是我在服务器端的代码:
$blob = $file['$ngfBlobUrl'];
$f_name = $file['name'];
$filename = uniqid() . '_' .$f_name; // generate unique file name
if(@file_put_contents($destination.'/'.$filename, @file_get_contents($blob)))
{
// do something!
}
file_get_contents()函数返回无法打开流:无效参数。当我在浏览器中输入正确加载pdf文件的URL时。
有没有人知道如何修复此问题或使用其他方法从指定的blob网址读取文件。
提前致谢!
答案 0 :(得分:1)
Blob URL只是一个临时URL,当您关闭选项卡时不再存在。它们仅存在于您正在使用的浏览器空间中,无法从您的服务器访问。
您需要传递实际的文件数据,而不是将URL传递给服务器。 首先,您需要从blob URL获取数据,如下所示:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'YOUR BLOB URL HERE');
xhr.responseType = 'blob';
xhr.onload = function(e) {
if (this.status == 200) {
var blobFileData = this.response; //This has the actual data
//now send to server (code below)
uploadFile(blobFileData);
}
};
xhr.send();
然后将blob数据上传到服务器:
function uploadFile(blobFileData){
var xhr = new XMLHttpRequest();
xhr.open("POST", "YOUR SERVER URL HERE");
var formdata = new FormData();
formdata.append("thefile", blobFileData, "YOUR FILE NAME HERE");
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
//success
}
}
xhr.send(formdata);
}
现在您可以像普通表格一样阅读数据 $ _POST ['thefile']和$ _FILES ['thefile']
答案 1 :(得分:0)
PHP不知道如何使用blob:
网址。您需要从$blob
:
$realBlobUrl = substr($blob, 5);
并获取那个。