PHP操作MongoDB GridFS 存储文件

  PHP操作MongoDB GridFS 存储文件,如图片文件

 我的测试代码:

1、前端上传文件html index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Mongo Gridfs</title></head><body><form action="upload.php" method="post" enctype="multipart/form-data"><label for="upfile" >上传图片</label><input type="file" id="upfile" name="upfile" /><input type="submit" />
</form></body></html>

2、上传文件进入MongoDB数据库并返回图片的索引ID upload.php

<?php
//上传图片到
header("Content-type:text/html;charset=utf-8");
// 连接Mongo并初始化GFS
// 数据库命名 picDB;集合命名pic_userid
$conn = new MongoClient();
$db = $conn->picDB;
// 取得gridfs对象
$prefix = 'pic';
$collection = $db->getGridFS($prefix);// 上传图片
if(isset($_FILES['upfile'])){ $id = $collection->storeUpload('upfile');$id = strval($id);echo "<p>图片路径为:<font color=red>http://{$_SERVER['HTTP_HOST']}/image.php?id={$id}</font></p>";
}
?>

3、根据图片ID直接从MongoDB里面获取图片资源并显示 image.php

<?php
// 根据ID索引值将图片资源取出来,即图片二进制数据
$conn = new Mongo();
$db = $conn->picDB;
// 取得gridfs对象
$prefix = 'pic';
$collection = $db->getGridFS($prefix);$id = $_GET['id'];$object = $collection->findOne(array('_id' => new MongoId($id)));
header('Content-type:image/jpg');
echo $object->getBytes();?>

改进:

在upload.php里面万一根据ID无法取出数据!应该做出提示。

在image.php里面应该添加异常处理,如果取出的数据格式不是image而是其他格式!要提前判断type。

最后,要在MongoDB的使用中添加授权使用,因为mongo默认是非授权使用的,也就是访问数据库时不需要提供用户名和密码。

 

转载于:https://www.cnblogs.com/wingjay/p/3950125.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS入门程序(一)

程序代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><title>Bootstrap 101 Template</title><link href"css/bootstrap.min.css" rel"stylesheet" media"screen"></head><…

Oracle运行set autotrace on报错SP2-0618、SP2-0611

SQL> set autotrace on SP2-0618: 无法找到会话标识符。启用检查 PLUSTRACE 角色 SP2-0611: 启用 STATISTICS 报告时出错 原因: PLUSTRACE角色不存在 解决办法&#xff1a; conn / as sysdba %ORACLE_HOME%\sqlplus\admin\plustrce.sql grant plustrace to hr; 转载于:https…

万字长文回顾智能驾驶进化史

来源&#xff1a;软件定义世界&#xff08;SDX&#xff09;作者&#xff1a;吴甘沙、张玉新摘要&#xff1a;当卡尔 本茨发明汽车&#xff0c;人类进入汽车时代时&#xff0c;科学技术就对人类的 “ 出行 ” 进行了新的定义&#xff0c;而随着技术的不断发展与进步&#xff0c…

组合数学基本工具-- 排列与组合以及简单公式

排列 从n个不同元素中任取m&#xff08;m≤n&#xff09;个元素&#xff0c;按照一定的顺序排列起来&#xff0c;叫做从n个不同元素中取出m个元素的一个排列。当mn时所有的排列情况叫全排列。 P(n,m)n(n-1)...(n-m1)n!/(n-m)! 特别的&#xff0c;定义0!1 组合 组合公式是指从…

atitit.动态加载数据库配置in orm hibernate mybatis

atitit.动态加载数据库配置in orm 1. 动态加载数据库配置的优点::: 1 1.1. 组合多个配置文件... 1 1.2. 连接多个数据库 1 2. 基本的流程:::getCfg内存对象,,,,生成工厂类,在opoenSession 1 2.1. Hibernate动态添加配置流程 1 2.2. mybatis动态添加配置流程 1 2.3. #hb code 2 …

重磅!德勤TMT行业2019十大预测,遍地黄金的中国机会

来源&#xff1a;智东西摘要&#xff1a;着眼于全球科技、传媒和电信行业在未来5年的关键趋势&#xff0c;分析颠覆性技术变革及未来可能会影响行业内企业的因素。全球最大的会计事务所德勤于近日发布了《2019科技、传媒和电信行业预测》报告&#xff0c;该报告着眼于全球科技、…

组合数学-- 放回取样基础公式证明

放回取样 用CR(m , r) 表示放回取样或者重复取样时一个m集合的r组合的数量&#xff0c;例如在允许放回取样的情况下&#xff0c;集合{a , b}的4个元素的组合可以得到下面的结果&#xff1a; {a,a,a,a}, {b,b,b,b}, {a,a,a,b}, {a,a,b,b}, {a,b,b,b} 下面我们给出可放回取样…

PHP环境安全性能检查

PHP环境安全性能检查 PHP在Linux环境下安全配置是一个复杂的过程&#xff0c;其中涉及到很多的细节设置&#xff0c;在这里发出来一个脚本&#xff0c;通过这个脚本来检测你的PHP环境是否存在安全隐患&#xff0c;从而针对这些对你的PHP环境进行加固。功能&#xff1a; 1.检测P…

集合的所有子集的算法

转载自&#xff1a;http://blog.csdn.net/yzl20092856/article/details/39995085 求集合的所有子集的算法 对于任意集合A&#xff0c;元素个数为n&#xff08;空集n0&#xff09;&#xff0c;其所有子集的个数为2^n个 如集合A{a,b,c},其子集个数为8&#xff1b;对于任意一个…

经济学人: Arm,孙正义手中的这只水晶球正在帮助他预测未来

来源&#xff1a;经济学人编译&#xff1a;机器之能 高璇摘要&#xff1a;除了看中 Arm 出色的盈利能力&#xff0c;对于孙正义来说&#xff0c;Arm 更像是未来计算应用的信息交换中心&#xff0c;虽然不能给软银具体的投资建议&#xff0c;但 Arm 确实可以告诉孙正义有前景、值…

C++开源项目

转载自&#xff1a;http://www.cnblogs.com/liinux/ 程序员要站在巨人的肩膀上&#xff0c;C拥有丰富的开源库&#xff0c;这里包括&#xff1a;标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 github:https://github.com/fffaraz/awesome-…

深入浅出浮点数

1. 什么是浮点数在计算机系统的发展过程中&#xff0c;曾经提出过多种方法表达实数。典型的比如相对于浮点数的定点数&#xff08;Fixed Point Number&#xff09;。在这种表达方式中&#xff0c;小数点固定的位于实数所有数字中间的某个位置。货币的表达就可以使用这种方式&am…

深度解析2019中国机器人行业年会主旨报告:把脉中国机器人发展,助力产业创新与协作共融...

来源&#xff1a;机器人大讲堂摘要&#xff1a;1月10日&#xff0c;由机器人大讲堂联合主办的2019中国机器人行业年会在北京盛大开幕。2018年经济下行趋势明显&#xff0c;迫使我们能沉下心来面对之前异常火爆的机器人市场&#xff0c;整个行业开始变得跌跌撞撞&#xff0c;很多…

矩阵的物理意义

转载自&#xff1a;http://blog.csdn.net/NightkidLi_911/article/category/2428737 &#xff08;一&#xff09; 如果不熟悉线性代数的概念&#xff0c;要去学习自然科学&#xff0c;现在看来就和文盲差不多。”&#xff0c;然而“按照现行的国际标准&#xff0c;线性代数是…

一些看起来简单做起来难的程序员笔试面试题集锦

1、判断三个bool值中是否至少有两个bool为真&#xff1f; 此题有几种不同的解法 &#xff08;1&#xff09;传统解法 bool leastTwo(bool a, bool b, bool c){return (a&&b) || (b&&c) || (c&&a); }&#xff08;2&#xff09;如果学过电路的可以考虑利…

如何防止基因编辑技术突破底线:警惕科学狂人再现

作者&#xff1a;胡丹萍 吴跃伟 刘楚来源&#xff1a;澎湃新闻从前隅于学界的基因编辑一词&#xff0c;在2018年&#xff0c;有如一声惊雷传入寻常百姓家。DNA和基因是生物体的核心代码&#xff0c;使用一组生物分子像剪刀或橡皮一样精确地改变基因序列即基因编辑技术。几十年来…

二分查找算法java

二分查找又称折半查找&#xff0c;它是一种效率较高的查找方法。 折半查找的算法思想是将数列按有序化(递增或递减)排列&#xff0c;查找过程中采用跳跃式方式查找&#xff0c;即先以有序数列的中点位置为比较对象&#xff0c;如果要找的元素值小于该中点元素&#xff0c;则将待…

opencv简单的矩阵操作

OpenCV的基本矩阵操作与示例 OpenCV中的矩阵操作非常重要&#xff0c;本文总结了矩阵的创建、初始化以及基本矩阵操作&#xff0c;给出了示例代码&#xff0c;主要内容包括&#xff1a; 创建与初始化矩阵加减法矩阵乘法矩阵转置矩阵求逆矩阵非零元素个数矩阵均值与标准差矩阵全…

中科院院士丁汉:数字化制造、机器人、人工智能是智能制造 “三驾马车”

丁汉院士演讲1月10日&#xff0c;由中国机电一体化技术应用协会、北京理工大学智能机器人与系统高精尖创新中心、中关村智友天使学院、机器人大讲堂(立德共创服务平台)、中关村融智特种机器人产业联盟和中关村信息谷等单位共同举办的2019年中国机器人行业年会在北京召开。会上&…

图像拼接---图片柱面投影简单实现

算法思想参考&#xff1a;http://blog.csdn.net/weixinhum/article/details/50611750 柱面投影是图片拼接的前期的一部分工作&#xff0c;以下代码只是简单的实现了投影&#xff0c;还可以优化&#xff0c; 柱面半径设置位图片宽度的一半&#xff0c;即 R width/2 代码运算…