从iPhone发送带有图片的电子邮件时出现问题

时间:2020-07-09 15:27:26

标签: javascript php

我有一张可以附加照片的表格,如果这张照片很大,上传的照片会改变尺寸:

function resizeImage($form) { 
    var filesToUploads = document.getElementById('file').files;
    var button = $form.find('.btn');

    button.addClass('loading');
    if (filesToUploads.length > 0) {
        var file = filesToUploads[0];
        
        if (file) {
            var reader = new FileReader();
            
            // Set the image once loaded into file reader
            reader.onload = function(e) {

                var img = document.createElement("img");
                img.src = e.target.result;

                var canvas = document.createElement("canvas");
                var ctx = canvas.getContext("2d");
                ctx.drawImage(img, 0, 0);

                var MAX_WIDTH  = 800;
                var MAX_HEIGHT = 800;
                var width        = img.width;
                var height       = img.height;

                if (width > height) {
                    if (width > MAX_WIDTH) {
                        height *= MAX_WIDTH / width;
                        width   = MAX_WIDTH;
                    }
                } else {
                    if (height > MAX_HEIGHT) {
                        width *= MAX_HEIGHT / height;
                        height = MAX_HEIGHT;
                    }
                }

                canvas.width  = width;
                canvas.height = height;
                var ctx       = canvas.getContext("2d");
                ctx.drawImage(img, 0, 0, width, height);

                dataurl = canvas.toDataURL(file.type);

                urltoFile(dataurl, file.name, file.type)
            .then(function(file){ 
                    newFile = file;
                    console.log(newFile);
                })
                .finally(() => {
                    button.removeClass('loading');
                });
            }

            reader.readAsDataURL(file);
        }

    } else {
        console.log('Image not found');
    }
}

function urltoFile(url, filename, mimeType){
    return (fetch(url)
        .then(function(res){return res.arrayBuffer();})
        .then(function(buf){return new File([buf], filename,{type:mimeType});})
    );
}

使用resizeImage调整图像大小,然后使用urltoFile将其转换为文件以格式发送

在php端,即收到的$ _FILE,我将其转换为base64,然后将其发送到与照片一起发送电子邮件(如果存在)的函数中,我可以这样做:

  if(isset($_FILES['file']))
  {
    $path         = $_FILES['file']['tmp_name'];
    $type         = pathinfo($path, PATHINFO_EXTENSION);
    $data         = file_get_contents($path);
    $encoded_file = chunk_split(base64_encode($data));

    $attachments[] = array(
      'name' => $_FILES['file']['name'], // Set File Name
      'data' => $encoded_file, // File Data
      'type' => $_FILES['file']['type'], // Type
      'encoding' => 'base64' // Content-Transfer-Encoding
    );

    $file = json_encode($attachments);
  }

这对我在Web上非常有效-mac-android,图像在邮件中的到达效果很好,问题是从iphone发送照片时出现的,图像总是在电子邮件中损坏,这是未显示在预览中或下载时

我不知道问题可能是什么,或者为什么它不能仅通过iphone起作用

0 个答案:

没有答案