auto method
Future<String>
auto(
- Object resource, {
- bool runInIsolate = false,
- bool? storeMode,
- ProgressListener? onProgress,
- CancelToken? cancelToken,
Upload file resource
according to type
if String
makes fromUrl upload if it is http/https url or try retrieve SharedFile if path is absolute, otherwise make an SharedFile
request according to size
Implementation
Future<String> auto(
Object resource, {
bool runInIsolate = false,
bool? storeMode,
ProgressListener? onProgress,
CancelToken? cancelToken,
}) async {
assert(resource is String || resource is SharedFile,
'The resource should be one of File or URL and File path');
if (runInIsolate) {
return _runInIsolate(
resource,
storeMode: storeMode,
onProgress: onProgress,
cancelToken: cancelToken,
);
}
if (resource is String && resource.isNotEmpty) {
Uri? uri = Uri.tryParse(resource);
if (uri != null) {
if (['http', 'https'].contains(uri.scheme)) {
return fromUrl(
resource,
storeMode: storeMode,
onProgress: onProgress,
);
} else if (uri.hasAbsolutePath) {
resource = SharedFile.fromUri(uri);
} else {
throw Exception('Cannot parse URL from string');
}
}
}
if (resource is SharedFile) {
final file = resource;
final filesize = await file.length();
if (filesize > _kRecomendedMaxFilesizeForBaseUpload) {
return multipart(
file,
storeMode: storeMode,
onProgress: onProgress,
cancelToken: cancelToken,
);
}
return base(
file,
storeMode: storeMode,
onProgress: onProgress,
cancelToken: cancelToken,
);
}
throw Exception('Make sure you passed File or URL string');
}