MOBILE-3213 ios: Add timestamp to some files in iOS

main
Dani Palou 2019-12-17 10:01:09 +01:00
parent ece5905b36
commit 3d5041de7c
2 changed files with 25 additions and 17 deletions

View File

@ -150,20 +150,25 @@ export class CoreFileUploaderProvider {
* @return Options. * @return Options.
*/ */
getCameraUploadOptions(uri: string, isFromAlbum?: boolean): CoreFileUploaderOptions { getCameraUploadOptions(uri: string, isFromAlbum?: boolean): CoreFileUploaderOptions {
const extension = this.mimeUtils.getExtension(uri), const extension = this.mimeUtils.guessExtensionFromUrl(uri);
mimetype = this.mimeUtils.getMimeType(extension), const mimetype = this.mimeUtils.getMimeType(extension);
isIOS = this.platform.is('ios'), const isIOS = this.platform.is('ios');
options: CoreFileUploaderOptions = { const options: CoreFileUploaderOptions = {
deleteAfterUpload: !isFromAlbum, deleteAfterUpload: !isFromAlbum,
mimeType: mimetype mimeType: mimetype
}; };
const fileName = this.fileProvider.getFileAndDirectoryFromPath(uri).name;
if (isIOS && (mimetype == 'image/jpeg' || mimetype == 'image/png')) { if (isIOS && (mimetype == 'image/jpeg' || mimetype == 'image/png')) {
// In iOS, the pictures can have repeated names, even if they come from the album. // In iOS, the pictures can have repeated names, even if they come from the album.
options.fileName = 'image_' + this.timeUtils.readableTimestamp() + '.' + extension; // Add a timestamp to the filename to make it unique.
const split = fileName.split('.');
split[0] += '_' + this.timeUtils.readableTimestamp();
options.fileName = split.join('.');
} else { } else {
// Use the same name that the file already has. // Use the same name that the file already has.
options.fileName = this.fileProvider.getFileAndDirectoryFromPath(uri).name; options.fileName = fileName;
} }
if (isFromAlbum) { if (isFromAlbum) {

View File

@ -128,10 +128,12 @@ export class CoreFileUploaderHelperProvider {
* @param defaultExt Defaut extension to use if the file doesn't have any. * @param defaultExt Defaut extension to use if the file doesn't have any.
* @return Promise resolved with the copied file. * @return Promise resolved with the copied file.
*/ */
protected copyToTmpFolder(path: string, shouldDelete: boolean, maxSize?: number, defaultExt?: string): Promise<any> { protected copyToTmpFolder(path: string, shouldDelete: boolean, maxSize?: number, defaultExt?: string,
let fileName = this.fileProvider.getFileAndDirectoryFromPath(path).name, options?: CoreFileUploaderOptions): Promise<any> {
promise,
fileTooLarge; const fileName = (options && options.fileName) || this.fileProvider.getFileAndDirectoryFromPath(path).name;
let promise;
let fileTooLarge;
// Check that size isn't too large. // Check that size isn't too large.
if (typeof maxSize != 'undefined' && maxSize != -1) { if (typeof maxSize != 'undefined' && maxSize != -1) {
@ -154,9 +156,6 @@ export class CoreFileUploaderHelperProvider {
} }
// File isn't too large. // File isn't too large.
// Picking an image from album in Android adds a timestamp at the end of the file. Delete it.
fileName = fileName.replace(/(\.[^\.]*)\?[^\.]*$/, '$1');
// Get a unique name in the folder to prevent overriding another file. // Get a unique name in the folder to prevent overriding another file.
return this.fileProvider.getUniqueNameInFolder(CoreFileProvider.TMPFOLDER, fileName, defaultExt); return this.fileProvider.getUniqueNameInFolder(CoreFileProvider.TMPFOLDER, fileName, defaultExt);
}).then((newName) => { }).then((newName) => {
@ -468,11 +467,13 @@ export class CoreFileUploaderHelperProvider {
path = 'file://' + path; path = 'file://' + path;
} }
const options = this.fileUploaderProvider.getMediaUploadOptions(media);
if (upload) { if (upload) {
return this.uploadFile(path, maxSize, true, this.fileUploaderProvider.getMediaUploadOptions(media)); return this.uploadFile(path, maxSize, true, options);
} else { } else {
// Copy or move the file to our temporary folder. // Copy or move the file to our temporary folder.
return this.copyToTmpFolder(path, true, maxSize); return this.copyToTmpFolder(path, true, maxSize, undefined, options);
} }
}, (error) => { }, (error) => {
const defaultError = isAudio ? 'core.fileuploader.errorcapturingaudio' : 'core.fileuploader.errorcapturingvideo'; const defaultError = isAudio ? 'core.fileuploader.errorcapturingaudio' : 'core.fileuploader.errorcapturingvideo';
@ -552,11 +553,13 @@ export class CoreFileUploaderHelperProvider {
return Promise.reject(error); return Promise.reject(error);
} }
const options = this.fileUploaderProvider.getCameraUploadOptions(path, fromAlbum);
if (upload) { if (upload) {
return this.uploadFile(path, maxSize, true, this.fileUploaderProvider.getCameraUploadOptions(path, fromAlbum)); return this.uploadFile(path, maxSize, true, options);
} else { } else {
// Copy or move the file to our temporary folder. // Copy or move the file to our temporary folder.
return this.copyToTmpFolder(path, !fromAlbum, maxSize, 'jpg'); return this.copyToTmpFolder(path, !fromAlbum, maxSize, 'jpg', options);
} }
}, (error) => { }, (error) => {
const defaultError = fromAlbum ? 'core.fileuploader.errorgettingimagealbum' : 'core.fileuploader.errorcapturingimage'; const defaultError = fromAlbum ? 'core.fileuploader.errorgettingimagealbum' : 'core.fileuploader.errorcapturingimage';