属性

auto 布尔型
设置auto为true,当文件被添加至上传队列时,将会自动上传。

buttonClass 字符串
为上传按钮添加类名。

buttonCursor 字符串
鼠标经过上传按钮时,鼠标的形状。可选值为‘hand’(手形) 和 ‘arrow’(箭头)。

buttonImage 字符串
定义“浏览”按钮背景图像的路径。给按钮设置背景图像的代码最好写在CSS文件中。

buttonText 字符串
定义显示在默认按钮上的文本。

checkExisting 字符串
定义检查目标文件夹中是否存在同名文件的脚本文件路径。

debug 布尔型
当其值为true时,开启SWFUpload调试模式。

fileObjName 字符串
定义上传数据处理文件中接收数据使用的文件对象名。

fileSizeLimit 整型
上传文件大小限制。

fileTypeDesc 字符串
可选择的文件类型的描述。此字符串出现在浏览文件对话框的文件类型下拉菜单中。

fileTypeExts 字符串
定义允许上传的文件后缀。

formDataJSON 对象
定义在文件上传时需要一同提交的其他数据对象。

height 整型
上传按钮的高度(单位:像素)。

itemTemplate 布尔型
itemTemplate选项允许你为每一个添加到队列中选项设定一个不同HTML模板。

method 字符串
上传文件的提交方法,取值‘post‘或‘get‘。

multi 布尔型
设置值为false时,一次只能选中一个文件。

overrideEvents JSON
该项定义了一组默认脚本中你不想执行的事件名称。

preventCaching 布尔型
如果设置为真,一个随机的值添加到SWF文件的URL,因此它不会缓存。

progressData 字符串
设置显示在上传进度条中的数据类型,可选项时百分比(percentage)或速度(speed)。

queueID 字符串
queueID选项允许你设置一个拥有唯一ID的DOM元素来作为显示上传队列的容器。

queueSizeLimit 整型
上传队列中一次可容纳的最大条数。

removeCompleted 布尔型
不设置该选项或者将其设置为false,将使上传队列中的项目始终显示于队列中,直到点击了关闭按钮或者队列被清空。

removeTimeout 整型
设置上传完成后从上传队列中移除的时间(单位:秒)。

requeueErrors 布尔型
设置为真时,上传队列重置或上传多次重试时,返回错误信息。

successTimeout 整型
表示uploadify的成功等待时间(单位:秒,默认30秒)。

swf 字符串
定义uploadify.swf的路径。

uploader 字符串
定义服务器端上传数据处理脚本文件uploadify.swf的路径。

uploadLimit 整型
定义允许的最大上传数量。

width 整型
定义浏览按钮的宽度。

事件

onCancel 函数
设置onCancel选项,在文件上传被取消时,将允许运行一个自定义函数。

onClearQueue 函数
设置onClearQueue选项,上传队列清空(激活ancel方法)时,将允许运行一个自定义函数。

onDestroy 函数
销毁Uploadify实例(调用destroy方法)时触发该事件。

onDialogClose 函数
当浏览文件对话框关闭时触发该事件。如果该事件被添加到overrideEvents属性中,在添加文件到队列中发生错误时,将不会弹出默认错误信息。

onDialogOpen 函数
在浏览文件对话框被打开前一瞬触发该事件。

onDisable 函数
调用disable方法禁用Uploadify实例时触发该事件。

onEnable 函数
调用disable方法启用Uploadify实例时触发该事件。

onFallback 函数
浏览器检测不到兼容版本的Flash时触发该事件。

onInit 函数
调用Uploadify初始化结束时触发该事件。

onQueueComplete 函数
队列中的所有文件被处理完成时触发该事件。

onSelect 函数
每添加一个文件至上传队列时触发该事件。

onSelectError 函数
选择文件返回错误时触发该事件。每一个文件返回错误都会触发该事件。

onSWFReady 函数
当flash按钮载入完毕时触发该事件。

onUploadComplete 函数
每一个文件上传完成都会触发该事件,不管是上传成功还是上传失败。

onUploadError 函数
上传失败时触发该事件。

onUploadProgress 函数
上传进度更新时触发该事件。

onUploadStart 函数
在开始上传之前的瞬间会触发该事件。

onUploadSuccess 函数
每一个文件上传成功时触发该事件。

方法

cancel
取消上传对象。

destroy
销毁Uploadify实例,并返回原文件域。

disable
控制浏览按钮是否可用。

settings
返回或更新一个Uploadify实例的值。

stop
停止当前上传。

upload
上传指定文件或队列中的所有文件。

基于tp5框架用uploadify插件实现异步上传图片,总结下今天下午的学习。整个上传部分分为几个部分。

一、刚开始当然是下载uploadify插件啦!

官网地址:http://www.uploadify.com/ 国内没被墙但是打开速度很慢(打个广告,有想合租ss的吗,一个月才7块钱,速度流程youtube 4k!)

二、引用jquery库,uploadify脚本,uploadify样式表

{load href="__STATIC__/admin/hui/lib/jquery/1.9.1/jquery.min.js" /}
{load href="__STATIC__/admin/uploadify/jquery.uploadify.min.js" /}
{load href="__STATIC__/admin/uploadify/uploadify.css" /}

以上三个文件都是必须加载的哈!加载路径视自己实际情况而定。
另外加载了image.js 在此js中进行图片上传操作

{load href="__STATIC__/admin/js/image.js" /}

三、声明一个html上传控件

<input id="file_upload" type="file" multiple="true" >

四、将声明的上传控件与image.js中的上传部分进行绑定

$(function() {
    $("#file_upload").uploadify({
        'swf'             : SCOPE.uploadify_swf,
        'uploader'        : SCOPE.image_upload,
        'buttonText'      : "图片上传",
        'fileTypeDesc'    : 'Image files',
        'fileObjName'     : 'file',
        'fileTypeExts'    : '*.gif; *.jpg; *.png',
        'onUploadSuccess' : function(file, data, response) {
            alert('The file ' + file.name + ' was successfully uploaded with a response of ' + response + ':' + data);
        }
    });
});

这段JS需要理解uploadify插件给出的 属性 事件 方法 三个定义。
具体可看这篇文章:https://www.hongxuelin.com/php/174.html
在这个js中我用id选择器选中之前声明的html上传控件,
swf属性设置swf文件的路径,
uploader 处理上传文件脚本的文件方法路径,这里我是在Image.php这个控制器Controller下的upload方法下进行操作的
buttonText指前端展示的上传按钮上的文字例如:
20170417170544.png
其他就不赘述了看上面那篇文章里有解释。

五、Image控制器下的upload方法进行上传!

<?php

namespace app\api\controller;

use think\Controller;
use think\Request;
use think\File;

class Image extends Controller
{
    public function upload(){
        $file = Request::instance()->file('file');
        //给一个图片保存在服务器的路径
        $info = $file->move('upload');
        //如果有info对象并且图片上传成功路径存在
        if($info && $info->getPathname()){
            return 这里返回成功和图片路径;
        }
    }
}

至此 上传就已经成功了,后面的业务逻辑就看个人了!根据官方给出的事件编写业务逻辑达到想要的目的。

server {
    listen       80;
    server_name  wx.hongxuelin.com;
    index index.html index.htm index.php;
    root /var/www/root/wx.hongxuelin.com/public/;
    set  $root  /var/www/root/wx.hongxuelin.com/public;

    
    location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
    {
        root $root;
    }

    location / {
        root    $root;
        index    index.html index.php;
        if ( -f $request_filename) {
            break;
        }
        if ( !-e $request_filename) {
            rewrite ^(.*)$ /index.php/$1 last;
            break;
        }
    }


    location ~ .+\.php($|/) {
        fastcgi_split_path_info ^((?U).+.php)(/?.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param    SCRIPT_FILENAME    $root$fastcgi_script_name;
        include /usr/local/nginx/conf/fastcgi.conf;
        fastcgi_pass 127.0.0.1:9000;
    }

    access_log logs/wx_access.log;
    error_log logs/wx_error.log;
}

活动参与人数大概150人左右,然后设计在公众号回复抽奖会随机获得一个一定范围内抽奖码,然后活动现场会在箱子里提前准备好一定范围的抽奖码纸条进行现场抽奖。基于这个需求,第一版代码只是简单的一个循环不断rand取值,回查数据库抽奖码是否产生过,如果是,重新随机rand取值。但这个思路写完就被我否决了= =,因为假设抽奖码产生了一大半了情况下,这样去随机到产生过抽奖码概率是很大的,增加了服务器数据库负担(虽然数据量很小,影响微乎其微),但是假设在数据量巨大上亿的情况下,这个问题如何解决。
于是在百度上一番查找,据random.org资料,将所有的数想象成一个表格?然后随机产生一个数,如果被使用过,那么随机选择上,下,左,右,移动一定的距离决定下一个数字。但是这貌似还是没解决如果范围内数据被用了一大半了,这效率还是很低啊。
在这个活动数据量很小的情况下,先给出解决方案,设计两张表,一张luck表存抽奖码和对应用户信息,一张status表存范围内所有的抽奖码,flag字段标记使用和未使用。每次用户发送抽奖指令,先判断是否抽过,是,则返回属于他的抽奖码,否则进入随机产生抽奖码流程->取出status表中flag为0未使用过的抽奖码,加入到数组,然后在数组中随机抽取一个,然后发送给用户,更新luck和status表最后exit。
但是这个思路在上亿数据面前,肯定不能取出来存数组吧,所以我觉得有必要看看大数据方面的知识?如果看官有好的思路,请指导我或者和我交流!
下面上代码,因为功能简单,直接一个php文件全写了。

阅读全文 »

基于哈夫曼树的原理用java写的一个用来压缩解压图片的控制台小程序。
程序压缩思路大致如下:
1.读取文件字节,转换成int类型数据就是0-255范围内的整型,然后统计出现次数即权重
2.根据权重构造出哈夫曼树,然后生成哈夫曼编码
3.将主要的编码长度,哈夫曼编码表和文件转译成的哈夫曼编码串写入文件即压缩文件。
解压的思路大致如下:
1.读取压缩文件,先读出各编码长度,计算出总长度,然后根据总长度读出哈夫曼编码表。
2.哈夫曼编码的特性编码前缀不重复,然后循环遍历查找哈夫曼编码表转译成字节然后写入文件即解压文件

阅读全文 »