· 8 years ago · Dec 19, 2016, 07:50 AM
1// over here we downloading image in blob format, converting it to base64 format and then uploading it.
2function readFile(file_link, file_name, params, header) {
3 var xhr = new XMLHttpRequest();
4 var deferred = $.Deferred();
5 xhr.onreadystatechange = function() {
6 if (this.readyState == 4 && this.status == 200) {
7 var blob = this.response;
8 var reader = new FileReader();
9 reader.onload = function() {
10 // here you'll call what to do with the base64 string result
11 params['file'] = this.result;
12 params['file_name'] = file_name;
13 $data.uploadDeleteDocuments.uploadDocuments(params).then(function(response) {
14 deferred.resolve(response);
15 }, function(err) {
16 deferred.reject(err);
17 });
18
19 };
20 reader.readAsDataURL(blob);
21 }
22 }
23 xhr.open('GET', file_link);
24 if (header) {
25 xhr.setRequestHeader('Authorization', 'Bearer ' + header);
26 }
27 xhr.responseType = 'blob';
28 xhr.send();
29 return deferred.promise();
30}
31
32// utility function for google drive
33function chooseFromGoogleDrive(params) {
34 // The Browser API key obtained from the Google API Console.
35 // Replace with your own Browser API key, or your own key.
36 var developerKey = 'AIzaSyAPeVXB4-CMMzyMTdlhpXYKOMfRBH5vllQ';
37
38 // The Client ID obtained from the Google API Console. Replace with your own Client ID.
39 var clientId = "204377991864.apps.googleusercontent.com"
40
41 // Replace with your own App ID. (Its the first number in your Client ID)
42 var appId = "204377991864";
43
44 // Scope to use to access user's Drive items.
45 var scope = ['https://www.googleapis.com/auth/drive'];
46
47 var pickerApiLoaded = false;
48 var oauthToken;
49 var deferred = $.Deferred();
50
51 // Use the Google API Loader script to load the google.picker script.
52 gapi.load('auth', {
53 'callback': onAuthApiLoad
54 });
55 gapi.load('picker', {
56 'callback': onPickerApiLoad
57 });
58
59 function onAuthApiLoad() {
60 window.gapi.auth.authorize({
61 'client_id': clientId,
62 'scope': scope,
63 'immediate': false
64 },
65 handleAuthResult);
66 }
67
68 function onPickerApiLoad() {
69 pickerApiLoaded = true;
70 return createPicker();
71 }
72
73 function handleAuthResult(authResult) {
74 if (authResult && !authResult.error) {
75 oauthToken = authResult.access_token;
76 createPicker();
77 }
78 }
79
80 // Create and render a Picker object for searching images.
81 function createPicker() {
82 if (pickerApiLoaded && oauthToken) {
83 var view = new google.picker.View(google.picker.ViewId.DOCS);
84 view.setMimeTypes("image/png,image/jpeg,image/jpg");
85 var picker = new google.picker.PickerBuilder()
86 .enableFeature(google.picker.Feature.NAV_HIDDEN)
87 .enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
88 .setAppId(appId)
89 .setOAuthToken(oauthToken)
90 .addView(view)
91 .addView(new google.picker.DocsUploadView())
92 .setDeveloperKey(developerKey)
93 .setCallback(pickerCallback)
94 .build();
95 picker.setVisible(true);
96 }
97 }
98
99 // A simple callback implementation.
100 function pickerCallback(data) {
101 if (data.action == google.picker.Action.PICKED) {
102 var fileId = data.docs[0].id;
103 var successfullyUploadedFiles = {
104 "files": [],
105 "error_message": ""
106 };
107 var accessToken = gapi.auth.getToken().access_token;
108 var header = accessToken;
109 var promises = [];
110 for (var i = 0; i < data.docs.length; i++) {
111 promises.push(readFile("https://www.googleapis.com/drive/v3/files/" + data.docs[i].id + '?alt=media', data.docs[i].name, params, header).then(function(file) {
112 successfullyUploadedFiles["files"].push(file);
113 }, function(err) {
114 successfullyUploadedFiles["error_message"] = err;
115 }));
116 }
117 $.when.apply($, promises).then(function() {
118 deferred.resolve(successfullyUploadedFiles);
119 }, function() {
120 deferred.reject(successfullyUploadedFiles);
121 });
122 }
123 }
124 return deferred.promise();
125}
126
127// utility fuction for one drive, this one requires a single domain related redirect urls
128function chooseFromOneDrive(params) {
129 var deferred = $.Deferred();
130
131 function launchOneDrivePicker() {
132 var odOptions = {
133 linkType: "downloadLink",
134 clientId: "a8640e8a-c87f-4b5e-a649-183be0eb6689", //"09314769-4a16-43b7-b2ab-6871209ee396", a8640e8a-c87f-4b5e-a649-183be0eb6689
135 action: "download",
136 multiSelect: true,
137 openInNewWindow: true,
138 advanced: {},
139 success: function(files) { /* success handler */
140 $data.isLoading = true;
141 var promises = [];
142 var successfullyUploadedFiles = {
143 "files": [],
144 "error_message": ""
145 };
146 for (var i = 0; i < files.value.length; i++) {
147 promises.push(readFile(files.value[i]['@microsoft.graph.downloadUrl'], files.value[i].name, params).then(function(file) {
148 successfullyUploadedFiles["files"].push(file);
149 }, function(err) {
150 successfullyUploadedFiles["error_message"] = err;
151 }));
152 }
153 $.when.apply($, promises).then(function() {
154 $data.isLoading = false;
155 deferred.resolve(successfullyUploadedFiles);
156 }, function() {
157 $data.isLoading = false;
158 deferred.reject(successfullyUploadedFiles);
159 });
160 },
161 cancel: function() { /* cancel handler */ },
162 error: function(e) {
163 console.log(e); /* error handler */
164 }
165 }
166 OneDrive.open(odOptions);
167 }
168 launchOneDrivePicker();
169 return deferred.promise();
170}
171
172// utility function for drop box
173function chooseFromDropBox(params) {
174 var deferred = $.Deferred();
175 var options = {
176 // Required. Called when a user selects an item in the Chooser.
177 success: function(files) {
178 var promises = [];
179 var successfullyUploadedFiles = {
180 "files": [],
181 "error_message": ""
182 };
183 for (var i = 0; i < files.length; i++) {
184 promises.push(readFile(files[i].link, files[i].name, params).then(function(file) {
185 successfullyUploadedFiles["files"].push(file);
186 }, function(err) {
187 successfullyUploadedFiles["error_message"] = err;
188 }));
189 }
190 $.when.apply($, promises).then(function() {
191 deferred.resolve(successfullyUploadedFiles);
192 }, function() {
193 deferred.reject(successfullyUploadedFiles);
194 });
195 },
196 cancel: function() {},
197 linkType: "direct", // or "direct"
198 multiselect: true, // or false
199 extensions: ['.png', '.jpg'],
200 };
201 Dropbox.appKey = 'edxmp5ki6qjawke';
202 Dropbox.choose(options);
203 return deferred.promise();
204}
205return {
206 chooseFromGoogleDrive: chooseFromGoogleDrive,
207 chooseFromOneDrive: chooseFromOneDrive,
208 chooseFromDropBox: chooseFromDropBox
209}