webuploader怎么添加文件入列表

webuploader怎么添加文件入列表,第1张

具体如下 :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

uploader = WebUploader.create({

auto: false,

// swf文件路径

swf: '/Scripts/webUploader/Uploader.swf',

// 文件接收服务端。

server: '@Url.Action("Upload", "Home")',

// 选择文件的按钮。可选。

// 内部根据当前运行是创建,可能是input元素,也可能是flash.

pick: '#myPicker',

// formData: { "name": name, "desc": desc},

prepareNextFile:true,

chunked: true, // 分片上传大文件

chunkRetry: 10, // 如果某个分片由于网络问题出错,允许自动重传多少次?

thread: 100,// 最大上传并发

method: 'POST',

fileSizeLimit: 1024,

// 只允许选择图片文件。

accept: {

title: 'HTML5组态文件',

extensions: 'gif,jpg,jpeg,bmp,png',

mimeTypes: 'img/*'

}

})

5

6

7

8

9

10

11

12

13

//当文件被加入队列之前触发

uploader.on('beforeFileQueued', function (file) {

//如果是单文件上传,把旧的文件地址传过去

if (!p.multiple) {

if (p.sendurl.indexOf("action=itemcode") >0) {

if ($("#txtItemCode").val() == '') {

layer.msg('请先填写商品编码再上传图片!')

//layer.alert('请先填写商品编码再上传图片!')

return false

}

data.formData= { "name": name, "desc": desc}

}

}

})

uploader.on('fileQueued', function (file) {

$("#listFile").append('<div id="' + file.id + '" class="item">' +

'<h4 class="info">' + file.name + '</h4>' +

'<p class="state">等待上传...</p>' +

'</div>')

})

uploader.on('uploadProgress', function (file, percentage) {

var li = $('#' + file.id),

percent = li.find('.progress .progress-bar')

// 避免重复创建

if (!percent.length) {

percent = $('<div class="progress progress-striped active">' +

'<div class="progress-bar" role="progressbar" style="width: 0%">' +

'</div>' +

'</div>').appendTo(li).find('.progress-bar')

}

li.find('p.state').text('上传中')

percent.css('width', percentage * 100 + '%')

})

uploader.on('uploadSuccess', function (file) {

$('#' + file.id).find('p.state').text('已上传')

})

uploader.on('uploadError', function (file) {

$('#' + file.id).find('p.state').text('上传出错')

})

uploader.on('uploadComplete', function (file) {

$('#' + file.id).find('.progress').fadeOut()

//$("#editModal").fadeOut(2000, window.location.reload())

//destory()

//$("#editModal").destory()

})

//当某个文件的分块在发送前触发,主要用来询问是否要添加附带参数,大文件在开起分片上传的前提下此事件可能会触发多次。

uploader.on('uploadBeforeSend', function (obj, data, headers) {

// data.DelFilePath = parentObj.siblings(".upload-path").val()

// data.ItemCode = $("#txtItemCode").val()

data.formData= { "name": name, "desc": desc}

})

uploader.on('all', function (type) {

if (type === 'startUpload') {

state = 'uploading'

} else if (type === 'stopUpload') {

state = 'paused'

} else if (type === 'uploadFinished') {

state = 'done'

}

if (state === 'uploading') {

$('#btnBeginUpload').text('暂停上传')

} else {

$('#btnBeginUpload').text('开始上传')

}

})

} else {

geap.alertPostMsgDefault("请选择一个文件!", "info")

}

})

// 点击上传事件

$('#btnSave').bind('click', function () {

var name = $("#txtName").val()

var id = $("#txtId").val()

if (!name || name.length == 0) {

alert("请填写名称")

return false

}

var obj = new Object()

obj.name = name

obj.id = id

uploader.options.formData = obj

// uploader.options.formData = { "name": name, "id": id, }

if (state === 'uploading') {

uploader.stop()

} else {

uploader.upload()

}

})

最近研究了下大文件上传的方法,找到了webuploader js 插件进行大文件上传,大家也可以参考这篇文章进行学习:《Web Uploader文件上传插件使用详解》 使用 使用webuploader分成简单直选要引入 <!--引入CSS--> <link rel="stylesheet" type="text/css" href="webuploader文件夹/webuploader.css"> <!--引入JS--> <script type="text/javascript" src="webuploader文件夹/webuploader.js"></script> HTML部分 <div id="uploader" class="wu-example"> <!--用来存放文件信息--> <div id="thelist" class="uploader-list"></div> <div class="btns"> <div id="picker">选择文件</div> <button id="ctlBtn" class="btn btn-default">开始上传 </button> </div> </div> 初始化Web Uploader jQuery(function() { $list = $('#thelist'),$btn = $('#ctlBtn'),state = 'pending',uploader uploader = WebUploader.create({// 不压缩imageresize: false,// swf文件路径swf: 'uploader.swf',// 文件接收服务端。server: upload.php,// 选择文件的按钮。可选。// 内部根据当前运行是创建,可能是input元素,也可能是flash.pick: '#picker',chunked: true,chunkSize:2*1024*1024,auto: true,accept: { title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*'} }) upload.php处理 以下是根据别人的例子自己拿来改的php 后台代码 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT") header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT") header("Cache-Control: no-store, no-cache, must-revalidate") header("Cache-Control: post-check=0, pre-check=0", false) header("Pragma: no-cache") if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {exit// finish preflight CORS requests here } if ( !empty($_REQUEST[ 'debug' ]) ) {$random = rand(0, intval($_REQUEST[ 'debug' ]) ) if ( $random === 0 ) { header("HTTP/1.0 500 Internal Server Error") exit } }// header("HTTP/1.0 500 Internal Server Error") // exit // 5 minutes execution time @set_time_limit(5 * 60) // Uncomment this one to fake upload time // usleep(5000) // Settings // $targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload" $targetDir = 'uploads'.DIRECTORY_SEPARATOR.'file_material_tmp' $uploadDir = 'uploads'.DIRECTORY_SEPARATOR.'file_material' $cleanupTargetDir = true// Remove old files $maxFileAge = 5 * 3600// Temp file age in seconds // Create target dir if (!file_exists($targetDir)) {@mkdir($targetDir) } // Create target dir if (!file_exists($uploadDir)) {@mkdir($uploadDir) } // Get a file name if (isset($_REQUEST["name"])) {$fileName = $_REQUEST["name"] } elseif (!empty($_FILES)) {$fileName = $_FILES["file"]["name"] } else {$fileName = uniqid("file_") } $oldName = $fileName $filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName // $uploadPath = $uploadDir . DIRECTORY_SEPARATOR . $fileName // Chunking might be enabled $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0 $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 1 // Remove old temp files if ($cleanupTargetDir) {if (!is_dir($targetDir) !$dir = opendir($targetDir)) { die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}') }while (($file = readdir($dir)) !== false) { $tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file // If temp file is current file proceed to the next if ($tmpfilePath == "{$filePath}_{$chunk}.part" $tmpfilePath == "{$filePath}_{$chunk}.parttmp") {continue } // Remove temp file if it is older than the max age and is not the current file if (preg_match('/\.(partparttmp)$/', $file) &&(@filemtime($tmpfilePath) <time() - $maxFileAge)) {@unlink($tmpfilePath) }}closedir($dir) }// Open temp file if (!$out = @fopen("{$filePath}_{$chunk}.parttmp", "wb")) {die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}') } if (!empty($_FILES)) {if ($_FILES["file"]["error"] !is_uploaded_file($_FILES["file"]["tmp_name"])) { die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}') }// Read binary input stream and append it to temp fileif (!$in = @fopen($_FILES["file"]["tmp_name"], "rb")) { die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}') } } else {if (!$in = @fopen("php://input", "rb")) { die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}') } } while ($buff = fread($in, 4096)) {fwrite($out, $buff) } @fclose($out) @fclose($in) rename("{$filePath}_{$chunk}.parttmp", "{$filePath}_{$chunk}.part") $index = 0 $done = true for( $index = 0$index <$chunks$index++ ) {if ( !file_exists("{$filePath}_{$index}.part") ) { $done = false break } }if ( $done ) {$pathInfo = pathinfo($fileName) $hashStr = substr(md5($pathInfo['basename']),8,16) $hashName = time() . $hashStr . '.' .$pathInfo['extension'] $uploadPath = $uploadDir . DIRECTORY_SEPARATOR .$hashName if (!$out = @fopen($uploadPath, "wb")) { die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}') }if ( flock($out, LOCK_EX) ) { for( $index = 0$index <$chunks$index++ ) {if (!$in = @fopen("{$filePath}_{$index}.part", "rb")) { break }while ($buff = fread($in, 4096)) { fwrite($out, $buff) }@fclose($in) @unlink("{$filePath}_{$index}.part") } flock($out, LOCK_UN) }@fclose($out) $response = [ 'success'=>true, 'oldName'=>$oldName, 'filePaht'=>$uploadPath, 'fileSize'=>$data['size'], 'fileSuffixes'=>$pathInfo['extension'], 'file_id'=>$data['id'], ] die(json_encode($response)) } // Return Success JSON-RPC response die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}') 以上就是本文的全部内容,希望对大家的学习有所帮助。

WebUploader通过准备dom结构、初始化、显示用户选择、文件上传进度、提示信息实现导入JS, CSS, SWF资源。

WebUploader的demo导入css等资源的流程:

WebUploader概述:WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。WebUploader文件上传组件在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+。两套运行时,同样的调用方式,可供用户任意选用。 采用大文件分片并发上传,极大的提高了文件上传效率。

功能介绍:

A、分片、并发:分片与并发结合,将一个大文件分割成多块,并发上传,极大地提高大文件的上传速度。

B、分片、并发:分片与并发结合,将一个大文件分割成多块,并发上传,极大地提高大文件的上传速度。

当网络问题导致传输错误时,只需要重传出错分片,而不是整个文件。另外分片传输能够更加实时的跟踪上传进度。

C、预览、压缩:支持常用图片格式jpg,jpeg,gif,bmp,png预览与压缩,节省网络数据传输。

解析jpeg中的meta信息,对于各种orientation做了正确的处理,同时压缩后上传保留图片的所有原始meta数据。

D、多途径添加文件:支持文件多选,类型过滤,拖拽(文件&文件夹),图片粘贴功能。

粘贴功能主要体现在当有图片数据在剪切板中时,Ctrl + V便可添加此图片文件。

E、HTML5 &FLASH:兼容主流浏览器,接口一致,实现了两套运行时支持,用户无需关心内部用了什么内核。

同时Flash部分没有做任何UI相关的工作,方便不关心flash的用户扩展和自定义业务需求。

F、MD5秒传:当文件体积大、量比较多时,支持上传前做文件md5值验证,一致则可直接跳过。

如果服务端与前端统一修改算法,取段md5,可大大提升验证性能,耗时在20ms左右。

G、易扩展、可拆分:采用可拆分机制, 将各个功能独立成了小组件,可自由搭配。

采用AMD规范组织代码,清晰明了,方便高级玩家扩展。

H、引入资源:使用Web Uploader文件上传需要引入三种资源:JS, CSS, SWF。

<!--引入CSS-->

<link rel="stylesheet" type="text/css" href="webuploader文件夹/webuploader.css">

<!--引入JS-->

<script type="text/javascript" src="webuploader文件夹/webuploader.js"></script>

<!--SWF在初始化的时候指定-->

文件上传:WebUploader只包含文件上传的底层实现,不包括UI部分。所以交互方面可以自由发挥。

A、Html部分。首先准备dom结构,包含存放文件信息的容器、选择按钮和上传按钮三个部分。

<div id="uploader" class="wu-example">

 <!--用来存放文件信息-->

 <div id="thelist" class="uploader-list"></div>

 <div class="btns">

  <div id="picker">选择文件</div>

  <button id="ctlBtn" class="btn btn-default">开始上传</button>

 </div>

 </div>

B、初始化Web Uploader,具体说明,请看一下代码中的注释部分。

var uploader = WebUploader.create({

 // swf文件路径

 swf: BASE_URL + '/js/Uploader.swf',

 // 文件接收服务端。

 server: 'Url/fileupload.php',

 // 选择文件的按钮。可选。

 // 内部根据当前运行是创建,可能是input元素,也可能是flash.

 pick: '#picker',

 // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!

 resize: false

})

C、显示用户选择。由于webuploader不处理UI逻辑,所以需要去监听fileQueued事件来实现。

D、文件上传进度。文件上传中,Web Uploader会对外派送uploadProgress事件,其中包含文件对象和该文件当前上传进度。

E、文件成功、失败处理。文件上传失败会派送uploadError事件,成功则派送uploadSuccess事件。不管成功或者失败,在文件上传完后都会触发uploadComplete事件。

创建Web Uploader实例

// 初始化Web Uploader

var uploader = WebUploader.create({

 // 选完文件后,是否自动上传。

 auto: true,

 // swf文件路径

 swf: BASE_URL + '/js/Uploader.swf',

 // 文件接收服务端。

 server: 'http://webuploader.duapp.com/server/fileupload.php',

 // 选择文件的按钮。可选。

 // 内部根据当前运行是创建,可能是input元素,也可能是flash.

 pick: '#filePicker',

 // 只允许选择图片文件。

 accept: {

  title: 'Images',

  extensions: 'gif,jpg,jpeg,bmp,png',

  mimeTypes: 'image/*'

 }

})

附:

监听fileQueued事件,通过uploader.makeThumb来创建图片预览图。PS: 这里得到的是Data URL数据,IE6、IE7不支持直接预览。可以借助FLASH或者服务端来完成预览。

然后剩下的就是上传状态提示了,当文件上传过程中, 上传成功,上传失败,上传完成都分别对应uploadProgress,uploadSuccess, uploadError, uploadComplete事件。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11694962.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存