2.命令行登录:npm adduser(输入账号、密码、邮箱)
3.删除插件package.json配置文件里面的private字段
4.在插件所在目录打开命令行,上传插件:npm publish
5.自定义js插件
7.自定义入口文件index.js
8.webpack配置文件
9.依赖配置文件package.json
10.打包插件:npm run build(生成一个index.js文件)
11.上传配置文件package.json(每次更新都需要修改版本号)
12.其他项目里面使用安装:npm i -s liangmath
13.导入并使用
上传文件swfUpload 插件:
基本的文件上传涉及到的四个文件 (还有一个处理数据的php文件 这里没有涉及到)
html页面:
upload_window.html
js文件:
swfupload.js
handlers.js
fileprogress.js
第一:从html页面出发:
重要的是将页面加载时间中的var setting={}这个大对象中的参数设置好 以下都是这个对象里面的常用配置 非常重要
首先需要将swfupload.swf加载
在 var setting={} 这个大对象里面加flash_url:值
如: flash_url: "<tpl>$siteurl_static</tpl>/assets/uc/js/swfupload.swf",
然后需要将上传的路径加入 如: upload_url: "http://load.zom.com/u.do?uploadkey=" + uploadkey + "&ck=" + ck + "&cc=" + cc,(java的上传路径)
相关的设置常用的有:
file_size_limit (设置上传的大小) file_types(设置文件上传的类型)file_types_description(设置文件上传描述)
file_upload_limit (设置文件上传的数量限制)file_queue_limit (设置文件队列数量限制)
prevent_swf_caching : false (在相关的swf文件增加随机参数避免Flash被缓存)
debug:false
按钮的相关配置:
button_width: "200",
button_height: "50",
button_text_left_padding: 16,
button_text_top_padding: 7,
button_cursor: button_cursor 指定鼠标悬停在Flash按钮上时的光标样式,可用值为SWFUpload.CURSOR里定义的常量。如:button_cursor: SWFUpload.CURSOR.HAND,
button_action(设置只能上传一个文档的限制:--》button_action: SWFUpload.BUTTON_ACTION.SELECT_FILE)
之后就是设置一些事件处理函数 这些都是在 handlers.js 里面相应的函数
file_dialog_start_handler: fileDialogStart,(设置文件对话开始函数)
file_queued_handler: fileQueued,(设置文件队列函数)
file_dialog_complete_handler: fileDialogComplete,(设置文件对话完成处理函数)
file_queue_error_handler: fileQueueError,(设置队列错误处理函数)
upload_start_handler: uploadStart,(设置开始上传函数)
upload_progress_handler: uploadProgress,(设置上传进度处理函数)
upload_error_handler: uploadError,(设置上传错误处理函数)
upload_complete_handler: uploadComplete,(设置上传完成处理函数)
upload_success_handler: uploadSuccess(设置上传成功处理函数)
以上的配置都是在页面自动加载函数的setting大对象里面需要配置的基本参数
除了以上这些还有下面相应的非常关键的配置
别忘记:在setting大对象结束之后 在自动加载函数结束之前还有swfu = new SWFUpload(settings) 实例化一个对象
var setting还有比较重要的配置 如下:
1.关于上传进度的配置是关键:
在var setting={}这个大对象里面设置一个元素:
custom_settings: {
progressTarget: "fsUploadProgress"
},
progressTarget的值(即fsUploadProgress)是文件上传进度的显示 将html里面设置相应的位置放id="fsUploadProgress"
如:<div class="progressbar progressbar-0" id="fsUploadProgress">
<span class="prog-num">0</span>
</div>
span标签里的0就是从0开始进行上传 0就是初始的显示进度
2:关于上传的按钮设置
在 var setting={} 这个大对象里面设置 button_placeholder_id : "spanButtonPlaceHolder"
需要将html相应的上传按钮加上相应的id="spanButtonPlaceHolder"
如:<div id="upload_doc" class="up-btn"><i >上传文档</i><span id="spanButtonPlaceHolder"></span></div>
成功上传需要将相应的数据进行处理:
在html页面中需要写ajax进行数据的处理~
如:
//成功后调用
function agree_upload(){
var doc_id=$('.doc_title').attr('id')
if(doc_id>0){
uploadFinish(doc_id)
parent.DOC88Window.close()
}else{
alert('您还未选择重新上传的文档')
}
}
function uploadFinish(new_p_id) {
var old_p_id = "<tpl>$p_id</tpl>"
$.ajax({
url: "/ucr/doc.php?act=save_upload",
type: "post",
data: {
old_p_id: old_p_id,
new_p_id: new_p_id
},
dataType: "json",
success: function (msg) {
if (msg.result == 1) {
alert("数据正确")
} else {
alert("数据错误")
}
}
})
}
第二:因为html页面中setting配置中有相应的函数处理配置 涉及到handler.js函数,所以接下来到handler.js文件的处理配置
根据html页面的配置 处理函数的顺序进行相应的配置
首先是fileQueue函数 文件排队函数:
需要设置一个变量 关于flash动画的函数
var stats = swfu.getStats()
根据需要将文件上传队列数量进行限制
if (stats.files_queued >1) {
alert("您的附件不能超过1个")
return false
}
接下来是fileQueueError函数 文件排队错误函数:
根据需要将相应的设置放在这个函数里面
可以放在try catch函数里面 设置的限制如下:
switch (errorCode) {
case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
alert('单个文件大小不要超过50MB')
break
case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
alert('不能上传空文件')
this.debug("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message)
break
case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
alert('文件类型错误')
break
default:
if (file !== null) {
}
this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message)
break
}
接下来是uploadStart函数 文件上传开始函数:
设置相应的功能按钮的变换 比如上传开始(走到这个函数时 可以将相应的上传按钮改成上传中 并且禁止点击 就是禁用功能 加上一个取消上传按钮 )
可以将上传的文件的名称和文件格式显示出来
如:
$("#upload_doc i").html("上传中")
$('#cancel_upload').html('取消')
$("#upload_doc").attr('disabled','disabled')
var name = file.name
$('.doc_title').html(name)
var format = file.type
format = format.toLocaleUpperCase()
format = format.replace('.', '')
$('.doc_format').html(format)
接下来是uploadProgress函数 文件上传进度函数:如:
var percent = Math.ceil((bytesLoaded / bytesTotal) * 100)//上传的进度
var progress = new FileProgress(file, this.customSettings.progressTarget)
progress.setProgress(percent)
progress.setStatus("正在上传")
接下来是uploadSuccess函数 文件上传成功函数
然后是uploadError函数 上传失败函数:
其他相关的函数可以根据需要进行设置
第三:fileprogress.js文件 关于文件上传进度 关键的是:
FileProgress函数的设置:
如:
function FileProgress(file, targetID) {
this.fileProgressID = file.id
this.fileProgressWrapper = document.getElementById(this.fileProgressID)
if (!this.fileProgressWrapper) {
this.fileProgressWrapper = document.createElement("li")
this.fileProgressWrapper.id = this.fileProgressID
document.getElementById(targetID).appendChild(this.fileProgressWrapper)
}
this.setTimer(null)
}
FileProgress.prototype.setProgress = function (percentage) {} 里面进度样式的处理
如:
if (percentage <= 5) {
$(".progressbar").addClass('progressbar-5')
} else if (percentage <= 10) {
$(".progressbar").addClass('progressbar-10')
}......
第四:swfupload.js文件 几乎不用修改 可以将不用的函数删减
有很详细的讲解 链接:https://www.cnblogs.com/myboke/p/5579236.html
http://www.runoob.com/w3cnote/swfupload-guide.html
一、Servlet实现文件上传,需要添加第三方提供的jar包下载地址:
1) commons-fileupload-1.2.2-bin.zip: 点击打开链接
2) commons-io-2.3-bin.zip:点击打开链接
接着把这两个jar包放到 lib文件夹下:
二:文件上传的表单提交方式必须是POST方式,
编码类型:enctype="multipart/form-data",默认是 application/x-www-form-urlencoded
比如:
<form action="FileUpLoad"enctype="multipart/form-data"method="post">
三、举例:
1.fileupload.jsp
<%@ page language="java" import="javautil*" pageEncoding="UTF-8"%>
<%
String path = requestgetContextPath()
String basePath = requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort()+path+"/"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'fileuploadjsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="stylescss">
-->
</head>
<body>
<!-- enctype 默认是 application/x-www-form-urlencoded -->
<form action="FileUpLoad" enctype="multipart/form-data" method="post" >
用户名:<input type="text" name="usename"><br/>
上传文件:<input type="file" name="file1"><br/>
上传文件: <input type="file" name="file2"><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
2.实际处理文件上传的 FileUpLoad.java
package comservletfileupload
import javaioFile
import javaio*
import javaioIOException
import javaioPrintWriter
import javautilList
import javaxservletServletException
import javaxservlethttpHttpServlet
import javaxservlethttpHttpServletRequest
import javaxservlethttpHttpServletResponse
import orgapachecommonsfileuploadFileItem
import orgapachecommonsfileuploadFileUploadException
import orgapachecommonsfileuploaddiskDiskFileItemFactory
import orgapachecommonsfileuploadservletServletFileUpload
/**
*
* @author Administrator
* 文件上传
* 具体步骤:
* 1)获得磁盘文件条目工厂 DiskFileItemFactory 要导包
* 2) 利用 request 获取 真实路径 ,供临时文件存储,和 最终文件存储 ,这两个存储位置可不同,也可相同
* 3)对 DiskFileItemFactory 对象设置一些 属性
* 4)高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory)
* 目的是调用 parseRequest(request)方法 获得 FileItem 集合list ,
*
* 5)在 FileItem 对象中 获取信息, 遍历, 判断 表单提交过来的信息 是否是 普通文本信息 另做处理
* 6)
* 第一种 用第三方 提供的 itemwrite( new File(path,filename) )直接写到磁盘上
* 第二种 手动处理
*
*/
public class FileUpLoad extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
requestsetCharacterEncoding("utf-8")//设置编码
//获得磁盘文件条目工厂
DiskFileItemFactory factory = new DiskFileItemFactory()
//获取文件需要上传到的路径
String path = requestgetRealPath("/upload")
//如果没以下两行设置的话,上传大的 文件 会占用 很多内存,
//设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同
/**
* 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上,
* 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 tem 格式的
* 然后再将其真正写到 对应目录的硬盘上
*/
factorysetRepository(new File(path))
//设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
factorysetSizeThreshold(1024*1024)
//高水平的API文件上传处理
ServletFileUpload upload = new ServletFileUpload(factory)
try {
//可以上传多个文件
List<FileItem>list = (List<FileItem>)uploadparseRequest(request)
for(FileItem item : list)
{
//获取表单的属性名字
String name = itemgetFieldName()
//如果获取的 表单信息是普通的 文本 信息
if(itemisFormField())
{
//获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的
String value = itemgetString()
requestsetAttribute(name, value)
}
//对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些
else
{
/**
* 以下三步,主要获取 上传文件的名字
*/
//获取路径名
String value = itemgetName()
//索引到最后一个反斜杠
int start = valuelastIndexOf("\\")
//截取 上传文件的 字符串名字,加1是 去掉反斜杠,
String filename = valuesubstring(start+1)
requestsetAttribute(name, filename)
//真正写到磁盘上
//它抛出的异常 用exception 捕捉
//itemwrite( new File(path,filename) )//第三方提供的
//手动写的
OutputStream out = new FileOutputStream(new File(path,filename))
InputStream in = itemgetInputStream()
int length = 0
byte [] buf = new byte[1024]
Systemoutprintln("获取上传文件的总共的容量:"+itemgetSize())
// inread(buf) 每次读到的数据存放在 buf 数组中
while( (length = inread(buf) ) != -1)
{
//在 buf 数组中 取出数据 写到 (输出流)磁盘上
outwrite(buf, 0, length)
}
inclose()
outclose()
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
eprintStackTrace()
}
catch (Exception e) {
// TODO Auto-generated catch block
//eprintStackTrace()
}
requestgetRequestDispatcher("filedemojsp")forward(request, response)
}
}
System.out.println("获取上传文件的总共的容量:"+item.getSize())
3.filedemo.jsp
<%@ page language="java" import="javautil*" pageEncoding="UTF-8"%>
<%
String path = requestgetContextPath()
String basePath = requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort()+path+"/"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'filedemojsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="stylescss">
-->
</head>
<body>
用户名:${requestScopeusename } <br/>
文件:${requestScopefile1 }<br/>
${requestScopefile2 }<br/>
<!-- 把上传的图片显示出来 -->
<img alt="go" src="/upload/<%=(String)requestgetAttribute("file1")%>" />
</body>
</html>
4结果页面:
以上就是本文的全部