【问题标题】:Upload a picture in php without submitting a form manually在php中上传图片,无需手动提交表单
【发布时间】:2013-05-09 04:26:32
【问题描述】:

我有一个使用 php 合并的图像(这是在 localhost 中)。我想自动将此文件上传到将接受它的服务器 php 文件或将其上传到服务器文件夹。

通常的方式是使用带有multipart的表单然后提交表单来上传。我需要将图像本身传递给 php 或自动提交表单,而无需手动执行。

我尝试创建一个目录图片设置权限为777并尝试将图片保存到服务器

$outfile = "http://XXXXXX.com/pictures/testing.png";
$quality = 100;
imagejpeg($output,$outfile,$quality);

没用

更新: 在 localhost 中尝试了 canvas todataurl,它工作正常,但在服务器上尝试时出错

XMLHttpRequest cannot load http://xxx.com/upload_img. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

所以我试图检查如何允许访问来源,但不明白如何去做。谁能给我一个关于如何做到这一点的简单教程,谢谢。

【问题讨论】:

    标签: php image upload gd


    【解决方案1】:

    我相信您必须为 imagejpeg 函数使用路径,例如('C:\path\filename')而不是网址(http://example.com

    【讨论】:

    • 需要澄清这是从本地主机到服务器,所以不要认为 ('C:\path\filename') 会起作用,将更新问题以明确这一点,谢谢
    【解决方案2】:

    我建议您使用 javascript 自动提交表单,并将该图像上传输入类型放在您自动提交的表单标签中。 javascript 代码会是这样的 <script language="JavaScript">document.formname.submit();</script>

    【讨论】:

    • 你可以手动将文件放入输入类型文件而不实际点击并选择文件吗?
    • @jhdj 你不能。这将是一个很大的安全问题。
    • 好的,谢谢你的信息将尝试检查 canvastodataurl 来做到这一点
    【解决方案3】:

    所以找到了使用带有 Access-Control-Allow-Origin 的 jquery $.post 的解决方案

    Javascript

    var canvas = document.getElementById('myCanvas');
      var context = canvas.getContext('2d');
      var imageObj = new Image();
      imageObj.src = 'sample.jpg';
      imageObj.onload = function() {
        canvas.width = imageObj.width;
        canvas.height = imageObj.height;
        context.drawImage(imageObj, 0, 0);
    
        var strDataURI = canvas.toDataURL();
        strDataURI = strDataURI.substr(22, strDataURI.length);
    
        $.post("http://xxxx.com/upload_img",
        { 
            str: strDataURI
        },
        function(data){
         //to check if any error occurs
            alert(data);
        });
    

    将接受图像的 php 文件获得了 php allow-control-allow-access 解决方案here

    // * can be set to something else such as http://example.com/
    header('Access-Control-Allow-Origin: *');
    
    $data = base64_decode($_POST["str"]);
    
    $urlUploadImages = "./uploads/";
    $nameImage = "test.jpg";
    
    $img = imagecreatefromstring($data);
    
    imagejpeg($img, $urlUploadImages.$nameImage, 100);
    imagedestroy($img);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-03
      • 2013-06-22
      • 1970-01-01
      • 2016-12-01
      • 2019-05-05
      • 2020-08-03
      • 2015-12-04
      • 2020-06-07
      相关资源
      最近更新 更多