文件上传不起作用 - AngularJS和PHP

时间:2017-07-14 10:52:41

标签: php angularjs laravel file-upload

我使用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网址读取文件。

提前致谢!

2 个答案:

答案 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);

并获取那个。