-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
89 lines (81 loc) · 1.97 KB
/
server.js
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
FileSchema = new SimpleSchema({
name: {
type: String
},
type: {
type: String
},
size: {
type: Number,
min: 0
}
});
Meteor.methods({
requestUploads: function(profile, files ) {
check( profile, String );
check( files, [FileSchema] );
var settings = s3UploadProfiles[profile];
var params = {
Bucket: settings.bucket,
ContentType: settings.mime,
Expires: settings.expires
};
var url;
var putObjFunc = function(err, surl) {
if (!err) {
url = surl;
} else {
console.log("Error signing url " + err);
}
}
var resp = { files: [] };
_.each( files, function( file ){
if( file.type !== settings.mime ){
resp.files.push( {error: "Expected type " + settings.mime } );
}else{
params.Key = generateUUID();
Meteor.wrapAsync(s3.getSignedUrl('putObject', params, putObjFunc));
resp.files.push(
{
name: file.name,
surl: url,
bucket: settings.bucket,
key: params.Key
}
);
var sigRecord = {
bucket: settings.bucket,
key: params.key
}
S3SignedUploadTmp.insert( sigRecord );
}
});
return resp;
}
});
function generateUUID(){
var d = new Date().getTime();
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = (d + Math.random()*16)%16 | 0;
d = Math.floor(d/16);
return (c=='x' ? r : (r&0x7|0x8)).toString(16);
});
return uuid;
};
S3SignedUploadTmpSchema = new SimpleSchema({
bucket: {
type: String
},
key: {
type: String
},
signedDateTime: {
type: Date,
autoValue: function(){ return (new Date()) }
},
ownerId: {
type: String,
autoValue: function(){ return Meteor.userId() }
}
});
S3SignedUploadTmp = new Meteor.Collection("S3SignedUploadTmpSchema", { schema: S3SignedUploadTmpSchema });