我在Drupal CMS中打印会话保存的图像数据时遇到问题。结果页面获得6个字节的内容,而不是我上传的图像数据。
图像存储代码为:
// Read content of the uploaded file
$file_content = file_get_contents($_FILES["image_field"]["tmp_name"]);
// Strore the file in the session
$_SESSION['session_image'] = $file_content;
然后在另一个页面中,我正在打印会话存储的数据。 代码:
// Set content type - octet-stream
header("Content-type: application/octet-stream");
// Print the session stored image back
echo $_SESSION['session_image'];
// Exit
exit;
我不想将以下内容作为解决方案:
我想要的是将上传的文件内容打印到浏览器(作为八位字节流)。我真的很感激,如果有人可以提供帮助。
更新代码:
// Read content of the uploaded file
$file_content = file_get_contents($_FILES["image_field"]["tmp_name"]);
// Strore the file in the session
$_SESSION['session_image'] = base64_encode($file_content);
// Modified to have base64 encoded content to store so decode it here
$content = base64_decode($_SESSION['session_image']);
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". mb_strlen($content, 'latin1'));
// Set content type - octet-stream
header("Content-type: application/octet-stream");
// Print content
echo $content;
exit;
但图像内容仍然不可见。当上传的图像内容与原始图像内容进行比较时,图像内容的某些字符会被转换为其他字符。
答案 0 :(得分:1)
尝试添加:
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". mb_strlen($_SESSION['session_image'], 'latin1'));
答案 1 :(得分:0)
图像内容发生变化,可能是由于编码类型。将会话存储的数据打印回客户端时,某些字符已消失。这可能会因Drupal会话处理而产生影响,因为它会在数据库中存储会话。
解决方案是克服所有问题,即base64_encode和store。然后通过ajax调用将内容检索为base64编码的源。
代码是:
print ' img_src = "data:image/*;base64,". $_SESSION['session_image'] . '"';
在javascript代码中,将img_src
值设置为img
字段src。
已编辑:已找到根本原因。上传到服务器的一些模块和相关文件在文件开头有BOM(字节顺序标记)字符,并且它导致一些时间具有用于UTF-8加密的BOM字符。建议不要使用UTF-8流的BOM,有些浏览器会报告呈现和内容相关的问题,尤其是在IE和Chrome中。