首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP JavaScript下载base 64文件,电子邮件附件

PHP JavaScript下载base 64文件,电子邮件附件
EN

Stack Overflow用户
提问于 2018-10-11 01:15:18
回答 1查看 0关注 0票数 0

我正在尝试使用GmailApi在我的dasboard中通过电子邮件将附件作为文件获取。exsisting代码适用于某些附件,但对于其中一些我有错误(在chrome中):下载失败 - 网络错误。有一个前端代码:

代码语言:javascript
复制
$('a.email-attachment').click(function(e){
    var url="<?php echo ($getAttachment); ?>";
    url=url.replace(/amp;/g,'')
    e.preventDefault()
    var attachmentId=$(this).attr('data-attachmentId')
    var fileName=$(this).attr('data-fileName')
    var fileSize=$(this).attr('data-fileSize')
    var mimeType=$(this).attr('data-mimeType')
    var messageId=$(this).parents('.email-single').attr('data-messegaId');
    var email=$(this).parents('.email-tab').attr('data-email')
    if(fileSize>30000000){
        alert('This file is too big use gmail');
        return
    }
    var data={
        'attachmentId':attachmentId,
        'messageId':messageId,
        'email':email,
    }
    jQuery.ajax({
        url: url,
        type: "POST",
        data: data,
        success: function (resp) {
            var file='data:'+mimeType+';base64,' + resp;
            var link = document.createElement('a');
            link.download = fileName;
            //link.href = 'data:,' + resp;
            link.href = file;
            document.body.appendChild(link);
            link.click();
        }
    })
})

有后端代码:

代码语言:javascript
复制
public function getAttachment()
{
    // retrieve stuff works ok
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    require_once __DIR__ . '/vendor/autoload.php';

    $attachmentId=$this->request->post['attachmentId'];
    $messageId=$this->request->post['messageId'];
    $email=$this->request->post['email'];

    $key = array_search($email, array_column($this->details,'email'));
    if($this->details[$key]['email']!=$email){
        //echo $email;
        return 0;
    }
    $detail=$this->details[$key];

    $client = $this->getClient($detail['redirect_url'],$detail['app_name'],$detail['secret'],$detail['credentials']);
    $service = new Google_Service_Gmail($client);
    $single_attachment = $service->users_messages_attachments->get('me',$messageId, $attachmentId);
    //end of the retrieve stuff
    $data=strtr($single_attachment->getData(),'-_', '+/');
    //$data=str_replace('-_', '+/',$single_attachment->getData());
    echo $data;


}

该错误主要发生在大文件中,并且仅在浏览器中(不是前端)。我总是在响应中得到一些base64字符串而没有更改或错误。

我该如何解决?我建议它可能是PHP设置的东西或我错过了这一行的东西。

代码语言:javascript
复制
$data=strtr($single_attachment->getData(),'-_', '+/');
在此处输入图像描述
在此处输入图像描述
EN

回答 1

Stack Overflow用户

发布于 2018-10-11 10:23:58

默认限制通常设置为128MB。您必须将其扩充到php.ini文件中,并将这些选项设置为您喜欢的限制。

代码语言:javascript
复制
memory_limit = 32M
upload_max_filesize = 24M
post_max_size = 32M

然后重启Apache服务器。一切都应该现在正常。让我知道你有任何其他问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档