upload method
Uploads a file to Parse Server
Implementation
@override
Future<ParseResponse> upload({ProgressCallback? progressCallback}) async {
if (saved) {
//Creates a Fake Response to return the correct result
final Map<String, String> response = <String, String>{
'url': url!,
'name': name,
};
return handleResponse<ParseFile>(
this,
ParseNetworkResponse(data: json.encode(response), statusCode: 201),
ParseApiRQ.upload,
_debug,
parseClassName,
);
}
progressCallback ??= _progressCallback;
_cancelToken = CancelToken();
final Map<String, String> headers = <String, String>{
HttpHeaders.contentLengthHeader: '${file!.lengthSync()}',
};
// Try to detect content-type using lookupMimeType
// If it cannot be determined, let the server infer from the filename
final String? contentType = lookupMimeType(file!.path);
if (contentType != null) {
headers[HttpHeaders.contentTypeHeader] = contentType;
}
try {
final String uri = ParseCoreData().serverUrl + _path;
final ParseNetworkResponse response = await _client.postBytes(
uri,
options: ParseNetworkOptions(headers: headers),
data: file!.openRead(),
onSendProgress: progressCallback,
cancelToken: _cancelToken,
);
if (response.statusCode == 201) {
final Map<String, dynamic> map = json.decode(response.data);
url = map['url'].toString();
name = map['name'].toString();
}
return handleResponse<ParseFile>(
this,
response,
ParseApiRQ.upload,
_debug,
parseClassName,
);
} on Exception catch (e) {
return handleException(e, ParseApiRQ.upload, _debug, parseClassName);
}
}