Skip to content

Commit 1a60ed4

Browse files
committed
generate random filename
:year/:month/:uuid.:ext
1 parent 0a4c295 commit 1a60ed4

7 files changed

+270
-17
lines changed

demo/application.js

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ $(function() {
2929
var $image = $('<img />');
3030
$image.attr('src', event.originalEvent.detail.response.url);
3131
$image.appendTo('body');
32+
33+
console.log(event.originalEvent.detail.response.url);
3234
});
3335

3436

dist/deep_uploader.js

+246-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,224 @@
11
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2+
(function (global){
3+
4+
var rng;
5+
6+
if (global.crypto && crypto.getRandomValues) {
7+
// WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto
8+
// Moderately fast, high quality
9+
var _rnds8 = new Uint8Array(16);
10+
rng = function whatwgRNG() {
11+
crypto.getRandomValues(_rnds8);
12+
return _rnds8;
13+
};
14+
}
15+
16+
if (!rng) {
17+
// Math.random()-based (RNG)
18+
//
19+
// If all else fails, use Math.random(). It's fast, but is of unspecified
20+
// quality.
21+
var _rnds = new Array(16);
22+
rng = function() {
23+
for (var i = 0, r; i < 16; i++) {
24+
if ((i & 0x03) === 0) r = Math.random() * 0x100000000;
25+
_rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;
26+
}
27+
28+
return _rnds;
29+
};
30+
}
31+
32+
module.exports = rng;
33+
34+
35+
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
36+
},{}],2:[function(require,module,exports){
37+
// uuid.js
38+
//
39+
// Copyright (c) 2010-2012 Robert Kieffer
40+
// MIT License - http://opensource.org/licenses/mit-license.php
41+
42+
// Unique ID creation requires a high quality random # generator. We feature
43+
// detect to determine the best RNG source, normalizing to a function that
44+
// returns 128-bits of randomness, since that's what's usually required
45+
var _rng = require('./rng');
46+
47+
// Maps for number <-> hex string conversion
48+
var _byteToHex = [];
49+
var _hexToByte = {};
50+
for (var i = 0; i < 256; i++) {
51+
_byteToHex[i] = (i + 0x100).toString(16).substr(1);
52+
_hexToByte[_byteToHex[i]] = i;
53+
}
54+
55+
// **`parse()` - Parse a UUID into it's component bytes**
56+
function parse(s, buf, offset) {
57+
var i = (buf && offset) || 0, ii = 0;
58+
59+
buf = buf || [];
60+
s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {
61+
if (ii < 16) { // Don't overflow!
62+
buf[i + ii++] = _hexToByte[oct];
63+
}
64+
});
65+
66+
// Zero out remaining bytes if string was short
67+
while (ii < 16) {
68+
buf[i + ii++] = 0;
69+
}
70+
71+
return buf;
72+
}
73+
74+
// **`unparse()` - Convert UUID byte array (ala parse()) into a string**
75+
function unparse(buf, offset) {
76+
var i = offset || 0, bth = _byteToHex;
77+
return bth[buf[i++]] + bth[buf[i++]] +
78+
bth[buf[i++]] + bth[buf[i++]] + '-' +
79+
bth[buf[i++]] + bth[buf[i++]] + '-' +
80+
bth[buf[i++]] + bth[buf[i++]] + '-' +
81+
bth[buf[i++]] + bth[buf[i++]] + '-' +
82+
bth[buf[i++]] + bth[buf[i++]] +
83+
bth[buf[i++]] + bth[buf[i++]] +
84+
bth[buf[i++]] + bth[buf[i++]];
85+
}
86+
87+
// **`v1()` - Generate time-based UUID**
88+
//
89+
// Inspired by https://github.com/LiosK/UUID.js
90+
// and http://docs.python.org/library/uuid.html
91+
92+
// random #'s we need to init node and clockseq
93+
var _seedBytes = _rng();
94+
95+
// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
96+
var _nodeId = [
97+
_seedBytes[0] | 0x01,
98+
_seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]
99+
];
100+
101+
// Per 4.2.2, randomize (14 bit) clockseq
102+
var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;
103+
104+
// Previous uuid creation time
105+
var _lastMSecs = 0, _lastNSecs = 0;
106+
107+
// See https://github.com/broofa/node-uuid for API details
108+
function v1(options, buf, offset) {
109+
var i = buf && offset || 0;
110+
var b = buf || [];
111+
112+
options = options || {};
113+
114+
var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;
115+
116+
// UUID timestamps are 100 nano-second units since the Gregorian epoch,
117+
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
118+
// time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
119+
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
120+
var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();
121+
122+
// Per 4.2.1.2, use count of uuid's generated during the current clock
123+
// cycle to simulate higher resolution clock
124+
var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;
125+
126+
// Time since last uuid creation (in msecs)
127+
var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;
128+
129+
// Per 4.2.1.2, Bump clockseq on clock regression
130+
if (dt < 0 && options.clockseq === undefined) {
131+
clockseq = clockseq + 1 & 0x3fff;
132+
}
133+
134+
// Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
135+
// time interval
136+
if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
137+
nsecs = 0;
138+
}
139+
140+
// Per 4.2.1.2 Throw error if too many uuids are requested
141+
if (nsecs >= 10000) {
142+
throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
143+
}
144+
145+
_lastMSecs = msecs;
146+
_lastNSecs = nsecs;
147+
_clockseq = clockseq;
148+
149+
// Per 4.1.4 - Convert from unix epoch to Gregorian epoch
150+
msecs += 12219292800000;
151+
152+
// `time_low`
153+
var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
154+
b[i++] = tl >>> 24 & 0xff;
155+
b[i++] = tl >>> 16 & 0xff;
156+
b[i++] = tl >>> 8 & 0xff;
157+
b[i++] = tl & 0xff;
158+
159+
// `time_mid`
160+
var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
161+
b[i++] = tmh >>> 8 & 0xff;
162+
b[i++] = tmh & 0xff;
163+
164+
// `time_high_and_version`
165+
b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
166+
b[i++] = tmh >>> 16 & 0xff;
167+
168+
// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
169+
b[i++] = clockseq >>> 8 | 0x80;
170+
171+
// `clock_seq_low`
172+
b[i++] = clockseq & 0xff;
173+
174+
// `node`
175+
var node = options.node || _nodeId;
176+
for (var n = 0; n < 6; n++) {
177+
b[i + n] = node[n];
178+
}
179+
180+
return buf ? buf : unparse(b);
181+
}
182+
183+
// **`v4()` - Generate random UUID**
184+
185+
// See https://github.com/broofa/node-uuid for API details
186+
function v4(options, buf, offset) {
187+
// Deprecated - 'format' argument, as supported in v1.2
188+
var i = buf && offset || 0;
189+
190+
if (typeof(options) == 'string') {
191+
buf = options == 'binary' ? new Array(16) : null;
192+
options = null;
193+
}
194+
options = options || {};
195+
196+
var rnds = options.random || (options.rng || _rng)();
197+
198+
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
199+
rnds[6] = (rnds[6] & 0x0f) | 0x40;
200+
rnds[8] = (rnds[8] & 0x3f) | 0x80;
201+
202+
// Copy bytes to buffer, if provided
203+
if (buf) {
204+
for (var ii = 0; ii < 16; ii++) {
205+
buf[i + ii] = rnds[ii];
206+
}
207+
}
208+
209+
return buf || unparse(rnds);
210+
}
211+
212+
// Export public API
213+
var uuid = v4;
214+
uuid.v1 = v1;
215+
uuid.v4 = v4;
216+
uuid.parse = parse;
217+
uuid.unparse = unparse;
218+
219+
module.exports = uuid;
220+
221+
},{"./rng":1}],3:[function(require,module,exports){
2222
'use strict';
3223

4224
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
@@ -59,7 +279,7 @@ DeepUploader.browseHandler = function () {
59279

60280
window.DeepUploader = DeepUploader;
61281

62-
},{"./file_trigger":3,"./uploaders/qiniu_uploader":5}],2:[function(require,module,exports){
282+
},{"./file_trigger":5,"./uploaders/qiniu_uploader":7}],4:[function(require,module,exports){
63283
"use strict";
64284

65285
Object.defineProperty(exports, "__esModule", {
@@ -80,7 +300,7 @@ EventTrigger.trigger = function (element, eventName) {
80300
exports["default"] = EventTrigger;
81301
module.exports = exports["default"];
82302

83-
},{}],3:[function(require,module,exports){
303+
},{}],5:[function(require,module,exports){
84304
'use strict';
85305

86306
Object.defineProperty(exports, '__esModule', {
@@ -138,7 +358,7 @@ FileTrigger.trigger = function (element, profile, callback) {
138358
exports['default'] = FileTrigger;
139359
module.exports = exports['default'];
140360

141-
},{"./event_trigger":2}],4:[function(require,module,exports){
361+
},{"./event_trigger":4}],6:[function(require,module,exports){
142362
'use strict';
143363

144364
Object.defineProperty(exports, '__esModule', {
@@ -155,6 +375,10 @@ var _event_trigger = require('../event_trigger');
155375

156376
var _event_trigger2 = _interopRequireDefault(_event_trigger);
157377

378+
var _uuid = require('uuid');
379+
380+
var _uuid2 = _interopRequireDefault(_uuid);
381+
158382
var BaseUploader = (function () {
159383
function BaseUploader(element, profile, file) {
160384
_classCallCheck(this, BaseUploader);
@@ -174,6 +398,19 @@ var BaseUploader = (function () {
174398
xhr: this.xhr
175399
};
176400
}
401+
}, {
402+
key: 'filename',
403+
value: function filename() {
404+
var date = new Date();
405+
var year = date.getFullYear();
406+
var month = date.getMonth() + 1;
407+
month = month > 10 ? month : '0' + month;
408+
409+
var fileExt = this.file.name.split('.').pop() || 'tmp';
410+
var fileName = _uuid2['default'].v4();
411+
412+
return year + '/' + month + '/' + fileName + '.' + fileExt;
413+
}
177414
}, {
178415
key: 'start',
179416
value: function start() {
@@ -193,10 +430,11 @@ var BaseUploader = (function () {
193430
}, {
194431
key: 'onBeforeUpload',
195432
value: function onBeforeUpload(callback) {
433+
var filename = this.filename();
196434
this.formData = new FormData();
197435
this.formData.append('file', this.file);
198-
this.formData.append('name', this.file.name);
199-
this.formData.append('key', this.file.name);
436+
// this.formData.append('name', filename);
437+
this.formData.append('key', filename);
200438

201439
callback();
202440
}
@@ -268,7 +506,7 @@ var BaseUploader = (function () {
268506
exports['default'] = BaseUploader;
269507
module.exports = exports['default'];
270508

271-
},{"../event_trigger":2}],5:[function(require,module,exports){
509+
},{"../event_trigger":4,"uuid":2}],7:[function(require,module,exports){
272510
// http://developer.qiniu.com/docs/v6/api/overview/up/form-upload.html
273511
// http://jssdk.demo.qiniu.io/
274512

@@ -341,8 +579,7 @@ var QiniuUploader = (function (_BaseUploader) {
341579
var self = this;
342580

343581
_get(Object.getPrototypeOf(QiniuUploader.prototype), 'onFileUploaded', this).call(this, data, function () {
344-
var filename = encodeURIComponent(self.response.key);
345-
self.response.url = self.profile.domain + filename;
582+
self.response.url = self.profile.domain + self.response.key;
346583

347584
callback();
348585
});
@@ -355,4 +592,4 @@ var QiniuUploader = (function (_BaseUploader) {
355592
exports['default'] = QiniuUploader;
356593
module.exports = exports['default'];
357594

358-
},{"./base_uploader":4}]},{},[1]);
595+
},{"./base_uploader":6}]},{},[3]);

0 commit comments

Comments
 (0)