2017-07-14 57 views
0

我正在使用angularJS和PHP来上传文件。从angularJS部分我送斑点网址是这样的:文件上传不起作用 - AngularJS和PHP

{ 
    $ngfBlobUrl: "blob:http://test.dev/91458ff7-fc18-4bbc-8dae-f06941e0a1c9" 
    selectedCategory: "1", 
    name: "some_file_name.pdf" 
} 

和PHP方面我想从BLOB网址获取文件并将其保存在本地存储。

这是我在服务器端代码:

$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

'$ file'从哪里来? – cweiske

+0

$ file = $ request-> documents;我使用laravel和Request对象来读取json。 –

+0

$ request->文档代表上面的对象。 –

回答

1

Blob URL只是一个临时URL,在关闭该选项卡时不再存在。它们只存在于您正在使用的浏览器空间中,无法从您的服务器访问。

而不是将URL传递到您的服务器,您需要传递实际的文件数据。 首先,你需要从团块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']

+0

这有道理......谢谢。 –

0

PHP不知道如何使用blob:网址。您需要从$blob中删除:

$realBlobUrl = substr($blob, 5); 

并提取该文件。

+0

当我使用你的代码时,我得到:{“error”:“file_get_contents(http:\/\/test.dev \/91458ff7-fc18-4bbc-8dae-f06941e0a1c9):无法打开流:HTTP请求失败! HTTP \ /1.0 404 Not Found \ r \ n“} –

+0

您是否有其他解决方案? –