繁体   English   中英

在PHP中将本地图像Blob转换为base64

[英]Convert local image blob to base64, in PHP

我正在为内部工具编写(HTML)表单。 用户可以填写有关问题的数据并附加屏幕截图。 然后将此表单通过Ajax提交给PHPMailer进行发送。 问题出在截图上。 由于系统限制,我无法让用户实际将文件上传到服务器。

目前,我正在使用HTML5文件阅读器来选择文件。 然后,我将图像Blob转换为base64,并将其发送到PHPMailer,以转换为附件。 这实际上工作得很好。 但是,我遇到了文件大小问题。 具体来说就是1000px x 1000px(402KB)的测试图像。 所得的base64字符串长度超过一百万个字符,并且请求返回413(请求实体太大)

我知道base64并不是传输大型图像的有效方法,并且我已经看到有关从数据库检索/转换图像斑点的各种文章。 我找不到的是有关检索本地图像Blob并将其转换为base64的信息。

我的图片Blob网址如下所示:Blob: http : //example.com/18960927-e220-4417-93a4-edb608e5b8b3

是否有可能在PHP中获取此本地图像数据,然后将其转换为base64?

我无法发布很多源代码,但是以下内容将使您了解我如何使用FileReader

window.onload=function(){
window.URL = window.URL || window.webkitURL;

var fileSelect = document.getElementById("fileSelect"),
    fileElem = document.getElementById("fileElem"),
    fileList = document.getElementById("fileList");

fileSelect.addEventListener("click", function (e) {
  if (fileElem) {
    fileElem.click();
  }
  e.preventDefault(); // prevent navigation to "#"
}, false);
}

function handleFiles(files) {
  if (!files.length) {
    fileList.innerHTML = "<p>No files selected!</p>";
  } else {
    fileList.innerHTML = "";
    var list = document.createElement("ul");
    fileList.appendChild(list);
    for (var i = 0; i < files.length; i++) {
        if(files[i].size > 1000000) {
            alert(files[i].name + ' is too big. Please resize it and try again.');
        } else {
        var li = document.createElement("li");
      list.appendChild(li);

      var img = document.createElement("img");
      img.src = window.URL.createObjectURL(files[i]);
      img.height = 60;
      img.setAttribute("class", "shotzPrev");
      img.onload = function() {
        window.URL.revokeObjectURL(this.src);
      }
      li.appendChild(img);
      var info = document.createElement("span");
      info.innerHTML = files[i].name + "<br>" + files[i].size + " bytes";
      li.appendChild(info);

        }
    }
  }
}

您可以POSTFile对象php

fetch("/path/to/server", {
  method: "POST"
  body: files[i]
})
.then(response => console.log(response.ok))
.catch(err => console.error(err));

我认为它的nginx错误,请更改nginx.conf文件中的client_max_body_size值。

例如 :

# set client body size to 2M #
client_max_body_size 2M;

PHP配置(可选)

您的php安装也限制了上传文件的大小。 编辑php.ini并设置以下指令。

;This sets the maximum amount of memory in bytes that a script is allowed to allocate
memory_limit = 32M

;The maximum size of an uploaded file.
upload_max_filesize = 2M

;Sets max size of post data allowed. This setting also affects file upload. To upload large files, this value must be larger than upload_max_filesize
post_max_size = 3M

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM