开发者社区 问答 正文

从FTP获取图像而不将其保存在本地并打印[重复]

我正在尝试从FTP服务器获取图像并在以后打印而不将其保存在本地。我的问题是,图像可能是某种加密形式,或者说是二进制文件,说实话我也不知道。

到目前为止,这是我确实拥有的代码:

  if(ftp_get($this->connection, "php://output", "web/media/images/".$imageName, FTP_BINARY)){
    $data = ob_get_contents();
    $dataSize =  ob_get_length();
    ob_end_clean();
    return array('data' => $data, 'size' => $dataSize);
  }else{
    return false;
  }
}

这是我从文件中调用的一个对象内部的方法,这是我尝试显示图像的代码。

该行用于获取图像(调用上面的函数),但这是一个不同的PHP文件!这是一个视图文件。

$ftpM = new FTPManager();
$image = $ftpM->getImagePreview($imageName);

在这里,我尝试打印图像。

<img class="materialboxed" width="650" src="<?php echo $image["data"]; ?>"/>

展开
收起
社区秘书 2019-12-10 10:40:59 539 分享 版权
阿里云 AI 助理回答

从FTP服务器获取图像并在不将其保存到本地磁盘的情况下直接显示,你的方法是正确的。你使用了php://output作为目标文件名来捕获FTP流并输出到浏览器,同时设置模式为FTP_BINARY以确保正确处理二进制文件(如图像)。以下是对你的代码的一些建议和改进:

  1. 确保FTP连接正常:在调用ftp_get()之前,请确认$this->connection已经成功建立到FTP服务器的连接。

  2. 直接输出图像内容:既然你已经在获取图像的方法中读取到了图像的二进制数据,并存储在$data变量中,你不需要再将这些数据存入数组返回,而是可以直接在视图文件中输出这些数据给客户端浏览器。修改视图文件中的代码如下:

<?php
$ftpM = new FTPManager();
$imageData = $ftpM->getImagePreview($imageName);
if ($imageData !== false) {
    header('Content-Type: image/jpeg'); // 假设是JPEG格式,根据实际情况调整MIME类型
    echo $imageData['data'];
    exit; // 确保输出后结束脚本
} else {
    echo "Failed to get the image.";
}
?>
  1. 注意MIME类型:在输出图像前,通过header()函数设置正确的MIME类型是非常重要的,这告诉浏览器它即将接收的是哪种类型的文件。如果你的图片不是JPEG格式,需要相应地更改MIME类型(例如PNG为'image/png')。

  2. 错误处理:在实际应用中,增加详细的错误处理逻辑会很有帮助,比如在FTP操作失败时记录或返回具体的错误信息。

  3. 资源管理:虽然你的代码没有显式地打开输出缓冲区(ob_start()),但php://output隐式地使用了它。你已经正确地使用了ob_end_clean()来清理缓冲区,这是好的实践,避免了潜在的内存泄漏问题。

按照上述建议调整后,你应该能够直接在浏览器中显示从FTP服务器获取的图像,而无需将其保存到本地文件系统。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答