thinkphp内置又拍云上传引擎的,修改配置文件就可以
'FILE_UPLOAD_TYPE'?=?'Ftp',
'UPLOAD_TYPE_CONFIG'?=?array(??
'host'??=?'',?//又拍云服务器
'username'?=?'',?//又拍云用户
'password'?=?'',?//又拍云密码
'bucket'?=?'',?//空间名称
),
php实现上传图片保存到数据库的方法.具体分析如下:
php 上传图片,一般都使用move_uploaded_file方法保存在服务器上.但如果一个网站有多台服务器,就需要把图片发布到所有的服务器上才能正常使用(使用图片服务器的除外)
如果把图片数据保存到数据库中,多台服务器间可以实现文件共享,节省空间.
首先图片文件是二进制数据,所以需要把二进制数据保存在mysql数据库.
mysql数据库提供了BLOB类型用于存储大量数据,BLOB是一个二进制对象,能容纳不同大小的数据.
BLOB类型有以下四种,除存储的最大信息量不同外,其他都是一样的.可根据需要使用不同的类型.
数据表photo,用于保存图片数据,结构如下:
CREATE?TABLE?+photo+?(?
+id+?int(10)?unsigned?NOT?NULL?auto_increment,?
+type+?varchar(100)?NOT?NULL,?
+binarydata+?mediumblob?NOT?NULL,?
PRIMARY?KEY?(+id+)?
)?ENGINE=MyISAM?DEFAULT?CHARSET=latin1?AUTO_INCREMENT=1?;
upload_image_todb.php代码如下:
php?
//?连接数据库?
$conn=@mysql_connect("localhost","root","")?or?die(mysql_error());?
@mysql_select_db('demo',$conn)?or?die(mysql_error());?//?判断action?
$action?=?isset($_REQUEST['action'])?$_REQUEST['action']?:?'';?
//?上传图片?
if($action=='add'){?
$image?=?mysql_escape_string(file_get_contents($_FILES['photo']['tmp_name']));?
$type?=?$_FILES['photo']['type'];?
$sqlstr?=?"insert?into?photo(type,binarydata)?values('".$type."','".$image."')";?
@mysql_query($sqlstr)?or?die(mysql_error());?
header('location:upload_image_todb.php');?
exit();?
//?显示图片?
}elseif($action=='show'){?
$id?=?isset($_GET['id'])?intval($_GET['id'])?:?0;?
$sqlstr?=?"select?*?from?photo?where?id=$id";?
$query?=?mysql_query($sqlstr)?or?die(mysql_error());?
$thread?=?mysql_fetch_assoc($query);?
if($thread){?
header('content-type:'.$thread['type']);?
echo?$thread['binarydata'];?
}?
}else{?
//?显示图片列表及上传表单?
html?
head?
title?upload?image?to?db?demo?/title?
/head?
body?
form?name="form1"?method="post"?action="upload_image_todb.php"?enctype="multipart/form-data"?
p图片:input?type="file"?name="photo"/p?
pinput?type="hidden"?name="action"?value="add"input?type="submit"?name="b1"?value="提交"/p?
/form?
$sqlstr?=?"select?*?from?photo?order?by?id?desc";?
$result?=?array();?
while($thread=mysql_fetch_assoc($query)){?
$result[]?=?$thread;?
foreach($result?as?$val){?
echo?'pimg?
src="upload_image_todb.php?action=showid='.$val['id'].'t='.time().'"
/body?
/html?
程序运行截图和数据库截图:
一个实例:
首先,在自己台式机和笔记本上都开通了ftp,这个不会的同学可以网上查serv-u,相关教程肯定不少的.
然后在台式机本地做了个测试:
$ftp_user_name = "laohu";
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
$file = 'test.txt';
$remote_file = '/test/a.txt';
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo "文件移动成功\n";
} else {
echo "移动失败\n";
}
ftp_close($conn_id);
运行后:文件移动成功.
if (is_uploaded_file($_FILES['uploadfile']['tmp_name'])) {
$ftp_user_name = "lesley";
$file = $_FILES['uploadfile']['tmp_name'];
$remote_file = '/test/'.$_FILES['uploadfile']['name'];
echo "文件:".$_FILES['uploadfile']['name']."上传成功\n";
echo "上传失败\n";
对应的前台页面代码:
form action="uploadfile.php" method="post" enctype="multipart/form-data"
input type="file" name="uploadfile" id="uploadfile" /
input type="submit" name="submit" value="submit" /
/form
运行后确实成功.
需要注意:
在用ftp_put方法时,第四个参数传送模式,需要用FTP_BINARY(二进制模式),用FTP_ASCII(文本模式)时,图片能上传但无法显示,其他文件重命名、中文乱码解决、上传权限控制等,就不在此提及了.
处理页面的代码:
$file = $_FILES['image']; //得到上传文件的数组,包括文件大小,类型等数组元素
$url = "imgs/".$file['name']; //上传后的图片地址
if(move_uploaded_file($file['tmp_name'],$url)){ //将图片上传到指定路径
//将$url存入数据库,(如果路径是固定的,也可以只把文件名存入数据库,取数据的时候在代码里加上路径就好了)
......
}else{
echo "上传失败";
要显示图片就只要从数据库里获取指定图片的路径,然后显示就可以了
有的,我最近研究了一下,写了一篇记录,如下
原文地址:
首先本篇文章实现的功能如下:
好啦,那我们开始吧,首先我们要有一个七牛云存储账号,如果没有的就自己去申请吧.
七牛云存储传送门:
SDK之中有一个qiniu的文件夹,这是所有的SDK实货,这个是最重要的.我们首先要把这个文件夹及里面的文件放到项目文件夹中,比如我放到这里.
大家可以看到有一个qiniu文件夹.好啦,资源支持就是这样.此时此刻呢我们要实现代码咯.
二.文件的上传.
今天这一节我们首先要引入rs.php文件,自己找一对应路径,代码如下:
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
dirname()是指的绝对路径,有时相对路径会出现问题,建议在前面加上dirname方法获取绝对路径.
require_once是引入文件,表示该文件只引入一次.
然后,传入你的AccessKey和SecretKey
代码如下:
Qiniu_SetKeys($accessKey, $secretKey);
然后建一个上传策略对象,将你的bucket?传入,bucket 就是你的空间名.
$bucket = 'designpartners';
$putPolicy = new Qiniu_RS_PutPolicy($bucket);
然后调用此方法来生成上传凭证.
$upToken = $putPolicy-Token(null);
此时此刻呢就写一个html表单
form?method="post"?action=""?name?=?"form"?enctype="multipart/form-data"
ul
input?type="hidden"?id="token"?name="token"?value=?php?echo?$upToken?
li
label?for="key"key:/label
input?name="key"?value=""
/li
label?for="bucket"照片:/label
input?name="file"?type="file"?/
input?type="submit"?value="提交"?
/ul
action?就填写?up.qiniu.com,表单提供了一个输入框key,用来输入你想保存的图片名称,上传到七牛之后就是这个名字.
然后一个文件选择,一个提交按钮.运行结果如下:
输入key值和选择照片即可实现照片的上传.哈哈哈有没有很简单.
原理和文件上传功能相仿.
引入文件
$key?=?'00000';
$domain?=?'designpartners.qiniudn.com';
注意:1.key值即为文件名,不要加后缀
Qiniu_SetKeys($accessKey,?$secretKey);?
$baseUrl?=?Qiniu_RS_MakeBaseUrl($domain,?$key);
$getPolicy?=?new?Qiniu_RS_GetPolicy();
$privateUrl?=?$getPolicy-MakeRequest($baseUrl,?null);
echo?$privateUrl?.?"\n";
在引入图片时直接
img src = "?php echo $privateUrl; ?"/
即可引入图片咯,很简单的吧.
$putPolicy?=?new?Qiniu_RS_PutPolicy($bucket);
$putPolicy-ReturnUrl?=?site_url()."/upload/receiveInfo";
$putPolicy-ReturnBody='{"key":?$(key)}';
注意:1.?ReturnUrl和ReturnBody必须指定,并且首字母要大写,很多人都小写开头,这样会跳转不成功.
upload/receiveInfo?upload_ret=eyJrZXkiOiAiNTU1In0=
$upload_ret?=?$_GET['upload_ret'];
$result=json_decode($json_ret);
echo?"key".$result-key;
好啦,获取到这个key值之后,你可以选择存到数据库或者进行其他的操作咯.
第五段:上传前文件类型的验证
我们可以用js来验证文件的后缀名,
在form的属性里加上
onsubmit="return isValidateFile('file');"
加上一个js方法
script
function?isValidateFile(obj)?{
var?extend?=?document.form.file.value.substring(document.form.file.value.lastIndexOf(".")?+?1);
if?(extend?==?"")?{
alert("请选择头像");
return?false;
else?{
if?(!(extend?==?"jpg"?||?extend?==?"png"))?{
alert("请上传后缀名为jpg或png的文件!");
return?true;
/script
即可验证它的类型是否合法.
附:CI代码实现:
获取Uptoken:
function?getUptoken(){
//远程存储空间名称
$bucket?=?'designpartners';
Qiniu_SetKeys($accessKey,?$secretKey);
echo?site_url();
$upToken?=?$putPolicy-Token(null);
return?$upToken;
文件上传:
public?function?uploadPic(){
$upToken?=?$this-getUptoken();
$data['upToken']?=?$upToken;
$this-load-view('upload',$data);
public?function?receiveInfo(){
echo?"key".$result-key;?
public?function?downloadPic(){
echo?"====?getPolicy?result:?\n";
表单:
form?method="post"?action=""?name?=?"form"?enctype="multipart/form-data"?onsubmit="return?isValidateFile('file');"
以上就是土嘎嘎小编为大家整理的php把图片上传到又拍云相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!