【问题标题】:File upload doesn't work - AngularJS and PHP文件上传不起作用 - AngularJS 和 PHP
【发布时间】:2017-12-19 10:47:42
【问题描述】:

我正在使用 angularJS 和 PHP 上传文件。从 angularJS 部分,我发送一个像这样的 blob url:

{
    $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() 函数返回无法打开流:无效参数。当我在浏览器中输入该 URL 时,pdf 文件正在正确加载。

有没有人知道如何解决这个问题或使用其他方式从指定的 blob url 读取文件。

提前致谢!

【问题讨论】:

  • $file 来自哪里?
  • $file = $request->documents;我正在使用 laravel 和 Request 对象来读取 json。
  • $request->documents 代表上面的对象。

标签: php angularjs laravel file-upload


【解决方案1】:

PHP 不知道如何处理blob: URL。您需要从$blob 中删除它:

$realBlobUrl = substr($blob, 5);

然后取出那个。

【讨论】:

  • 当我使用你的代码时,我得到:{"error":"file_get_contents(http:\/\/test.dev\/91458ff7-fc18-4bbc-8dae-f06941e0a1c9): failed to打开流:HTTP 请求失败!HTTP\/1.0 404 Not Found\r\n"}
  • 您还有其他解决方案吗?
【解决方案2】:

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']

【讨论】:

  • 有道理...谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-02-11
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
相关资源
最近更新 更多