直接上干货 不废话了
普通上传: onthink框架 后台已经有图片和文件上传功能
controller里只需:
public function addPicture(){
/* 调用文件上传组件上传文件 */
$Picture = D('Picture');
$info = $Picture->upload(
$_FILES, C('PICTURE_UPLOAD'),
C('PICTURE_UPLOAD_DRIVER'),
null );
//TODO:上传到远程服务器
$this->ajaxReturn($info);
}
上传成功后会返回图片信息 具体信息可以用dump打印
onthink的后台是支持批量上传的前台需要修改 我这里由于没考虑兼容性所以 直接采用的是 js formdata 的方式进行上传 优点是你可以自己定制上传按钮
缺点 进度条之类的要自己写TAT 一个简单的例子:
<input type="file" id="uploadImageBack" class="uploadPictureInput" accept="image/gif, image/jpeg,image/png"/>
var fromdata = new FormData();
function uploadPic(id,name)
{
$("#"+id).on("change", function(){
var files = !!this.files ? this.files : [];
return if (!files.length || !window.FileReader) return;
if (/^image/.test( files[0].type)){
var reader = new FileReader();
reader.readAsDataURL(files[0]);
fromdata.append(name, files[0]);
reader.onloadend = function(){
$("#"+id).parent().parent().find('.upload-img-box').empty();
$("#"+id).parent().parent().find('.upload-img-box').html( '<div class="upload-pre-item"><span class="delPic" key="'+name+'">X</span><img src="' + this.result + '"/></div>' );
} }
});
}
你可以修改files 为递增的形式 使之可以实现批量上传 (注意低版本浏览器可能不支持该功能)
确保服务器端已经配置好上传的文件夹还有并且给了文件夹权限
FTP上传: 首先改一下admin下面的config文件增加
'PICTURE_UPLOAD_FTP' => array(
'mimes' => '', //允许上传的文件MiMe类型
'maxSize' => 2*1024*1024, //上传的文件大小限制 (0-不做限制)
'exts' => 'jpg,gif,png,jpeg', //允许上传的文件后缀
'autoSub' => true, //自动子目录保存文件
'subName' => array('date', 'Ymd'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
'rootPath' => false, //保存根路径 'savePath' => '', //保存路径
'saveName' =>array('uniqid', ''), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组
'saveExt' => '',//文件保存后缀,空则使用原后缀
'replace' => true, //存在同名是否覆盖
'hash' => true, //是否生成hash编码
'callback' => false, //检测文件是否存在回调函数,如果存在返回文件信息数组
),
'PICTURE_UPLOAD_DRIVER_FTP'=>'Ftp',
'PICTURE_UPLOAD_CONFIG' => array(
'host' => '192.168.24.186', //服务器
'port' => 21, //端口
'timeout' => 90, //超时时间
'username' => 'test',
'password' => 'test',
),
然后controller里改为:
public function addPicture(){
/* 返回标准数据 */
$return = array('status' => 1, 'info' => '上传成功',);
/* 调用文件上传组件上传文件 */
$Picture = D('Picture');
$info = $Picture->upload(
$_FILES,
C('PICTURE_UPLOAD_FTP'),
C('PICTURE_UPLOAD_DRIVER_FTP'),
C("PICTURE_UPLOAD_CONFIG") );
//TODO:上传到远程服务器 $book = D('Books');
/* 返回JSON数据 */
$this->ajaxReturn($info);
}