我正在尝试使用GmailApi在我的dasboard中通过电子邮件将附件作为文件获取。exsisting代码适用于某些附件,但对于其中一些我有错误(在chrome中):下载失败 - 网络错误。有一个前端代码:
$('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();
}
})
})
有后端代码:
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设置的东西或我错过了这一行的东西。
$data=strtr($single_attachment->getData(),'-_', '+/');
发布于 2018-10-11 10:23:58
默认限制通常设置为128MB。您必须将其扩充到php.ini
文件中,并将这些选项设置为您喜欢的限制。
memory_limit = 32M
upload_max_filesize = 24M
post_max_size = 32M
然后重启Apache服务器。一切都应该现在正常。让我知道你有任何其他问题。
https://stackoverflow.com/questions/-100002876
复制相似问题