从 PHP 写入图像文件时出错
我正在尝试从 blob 写入图像文件。
if($_POST['logoFilename'] != 'undefined'){
$logoFile = fopen($_POST['logoFilename'], 'w') or die ("Cannot create ".$_POST['logoFilename']);
fwrite($logoFile, $_POST['logoImage']);
fclose($logoFile);
}
在前面的代码片段中,$_POST['logoImage']
是一个 BLOB。文件已正确写入根目录,但无法打开该文件。在 ubuntu 11.04 中,我收到以下错误:
Error interpreting JPEG image file (Not a JPEG file: starts with 0x64 0x61).
如果我创建 img 并设置其 src=blob,则 BLOB 会正确显示
下面包含 BLOB 的第一个片段:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAgGBgcGBQgHBwcJCQ
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您的“Blob”确实是一个Data URI:
由于您只想要解码后的数据部分,因此您必须这样做
,但是由于 PHP 本身支持 data:// 流,你也可以(感谢@NikiC)
如果上面的方法不起作用,你可以尝试使用GDlib:
Your "Blob" is really a Data URI:
Since you only want the decoded data part, you have to do
But since PHP natively supports data:// streams, you can also do (thanks @NikiC)
If the above doesnt work, you can try with GDlib:
如果它确实是一个 blob,您可能需要尝试使用模式“wb”作为 fopen() 调用的第二个参数。
编辑:您也可以考虑使用 file_put_contents(),它是二进制的 -安全的。
If it's really a blob, you might want to trying using mode "wb" as the second parameter to your fopen() call.
EDIT: You might also consider just using file_put_contents(), which is binary-safe.
如果是文件上传控件,则$_POST
不会包含该信息。您正在寻找使用 处理文件上传 http://php.net/manual/en/reserved.variables.files.php" rel="nofollow noreferrer">$_FILES
。 (更具体地说,move_uploaded_file)鉴于新的更新,请尝试以下操作:
If it's a file upload control,$_POST
won't contain the information. You're looking for handling file uploads with$_FILES
. (And more specifically, move_uploaded_file)Given the new update, try the following:
此函数会将数据 uri 保存到文件:
在您的情况下使用:
This function will save data uri to file:
Usage in your case: