-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathuploadclient.js
68 lines (61 loc) · 2.36 KB
/
uploadclient.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
const request = require('request');
const fs = require('fs');
const path = require('path');
async function getReadableUrl(client,fetchurl){
let result = await client.invokeApi(null,fetchurl,'GET',{},{})
return result.data.redirect_url;
}
exports.getReadableUrl = getReadableUrl;
async function uploadClientDocument(client, extCustomerId, filePath){
const signerApi = `/customers/${extCustomerId}/uploaddoc`
return await uploadFile(signerApi,client,'CUSTOMER_DOC',filePath);
}
exports.uploadClientDocument = uploadClientDocument;
async function uploadBranchDocument(client, extBranchId, filePath){
const signerApi = `/branches/${extBranchId}/uploaddoc`
return await uploadFile(signerApi,client,'BRANCH_DOC',filePath);
}
exports.uploadBranchDocument = uploadBranchDocument;
async function uploadAgentDocument(client, extAgentId, filePath){
const signerApi = `/agents/${extAgentId}/uploaddoc`
return await uploadFile(signerApi,client,'AGENT_DOC',filePath);
}
exports.uploadAgentDocument = uploadAgentDocument;
async function uploadFile(signerApi,client,fileType,filePath){
const fileMetadata = {
type:fileType,
filename:path.basename(filePath)
}
let result = await client.invokeApi(null,
signerApi,
'POST',
{},
fileMetadata)
if(!result || result.status != 200){
throw new Error("Unable to reserve an upload point for file");
}
let data = result.data;
let uploadUrl = data.uploadurl;
let s3uploadResult = await uploadClient(uploadUrl,filePath,data.ContentType)
return {status:'OK',fetchurl:data.fetchurl};
}
async function uploadClient(url,diskFilePath,contentType){
return new Promise((resolve,reject)=>{
var stats = fs.statSync(diskFilePath);
fs.createReadStream(diskFilePath).pipe(request({
method: 'PUT',
url: url,
headers: {
'Content-Type':contentType,
'Content-Length': stats['size']
}
}, function (err, res, body) {
if(err || res.statusCode != 200){
reject({body:res})
}
else{
resolve({body:{status:'OK'}})
}
}));
})
}