overflowers!
将文件保存到服务器上的目录时,我遇到了一个奇怪的问题。流程如下:
到目前为止我唯一的打嗝是使用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:('删除/文件/路径')是正确的,并在每个场景中使用,但我无法显示。
$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字节)
提前感谢您的帮助!
答案 0 :(得分:1)
非常感谢@pilsetnieks的帮助。解决方案主要是在我上面解释的内容之外。我使用上面的PHP方法处理jpegs和pngs。
显然,
$imageData = str_replace("data:image/jpeg;base64,", "", $imageData);
只会处理jpeg图像。为了解决这个问题,我使用以下行来处理jpegs和pngs:
$imageData = substr($imageData, strpos($imageData, ",")+1);
此外,我从此行中删除了扩展名,因此该文件可以是以下类型:
$absoluteURL = $namePrefix.$randomID.".jpg";