2

溢出者!

我在将文件保存到服务器上的目录时遇到了一个奇怪的问题。流程如下:

  1. 从画布数据生成图像。
  2. 使用 PHP 通过 AJAX 将图像写入我的服务器。(目录权限为 777)
  3. 利润。

到目前为止,我唯一遇到的问题是在使用库存的 Android“浏览器”浏览器时。我已经能够使用该项目支持的浏览器列表成功保存图像。(Safari、Firefox、Chrome、IE9+)。但是,当我在 Android 浏览器上进行测试时,PHP正在将文件保存到正确的目录,但为 0 字节。我正在测试 Android v. 4.1.1

我的问题是为什么在这种情况下我得到一个 0 字节的文件?我该如何补救?

我一直在谷歌和 stackoverflow 上寻找答案,到目前为止,我必须测试大约 20 种不同的解决方案,但无济于事。我想知道这个错误是否是我很容易错过的,因为我已经盯着同一个代码这么久了。

这是 AJAX 调用:(CoffeeScript)

$.ajax
        type: "POST"
        url: "#{servicesSrc}image-utils.php"
        data:
            post_method: "save_image"
            image_data: image.src
            name_prefix: @currentServiceString + "_"
        success: (response) =>
            doStuff(response) # <-- redacted method name
        error: (jqXHR, textStatus, errorThrown) ->
            console.error("storeTempUserImage :: Error: #{textStatus}", errorThrown)

并且 PHP: ('REDACTED/FILE/PATH') 是正确的,并且在每个场景中都使用过,但我无法显示。

$randomID = get_random_string();
$imageData = $_POST["image_data"];
$imageData = str_replace("data:image/jpeg;base64,", "", $imageData);
$imageData = str_replace(" ", "+", $imageData);
$data = base64_decode($imageData);
$namePrefix = (isset($_POST["name_prefix"])) ? $namePrefix = $_POST["name_prefix"] : $namePrefix = "";
$absoluteURL = $namePrefix.$randomID.".jpg";
$destinationURL = "REDACTED/FILE/PATH" . $absoluteURL;
$fp = fopen($destinationURL, "wb");
fwrite($fp, $data);
fclose($fp);
echo $absoluteURL;

以及正确保存图像和未正确保存图像的示例输出: twitter_jKbxRIt3NRw8Nd1ucJFcDSrMUBPs9H7M.jpg 98 KB(97,866 字节) twitter_LLAwIET5VJDO4LXvD4O0hsngnj2UYata.jpg 0 B(0 字节)

提前感谢您的帮助!

4

1 回答 1

1

非常感谢@pilsetnieks 的帮助。解决方案主要不在我上面解释的范围内。我使用上面的 PHP 方法来处理 jpegs 和 pngs。

明显地,

$imageData = str_replace("data:image/jpeg;base64,", "", $imageData);

只会处理 jpeg 图像。为了解决这个问题,我使用以下行来处理 jpeg 和 png:

$imageData = substr($imageData, strpos($imageData, ",")+1);

此外,我从这一行中删除了扩展名,因此文件可以是任何一种类型:

$absoluteURL = $namePrefix.$randomID.".jpg";
于 2013-04-29T20:59:05.953 回答