Add support for file uploads using new async upload jobs, add admin section for uploading distance files
All checks were successful
Release / meta (push) Successful in 3s
Release / linux-build (push) Successful in 59s
Release / web-build (push) Successful in 1m24s
Release / android-build (push) Successful in 6m13s
Release / release-master (push) Successful in 8s
Release / release-dev (push) Successful in 13s
All checks were successful
Release / meta (push) Successful in 3s
Release / linux-build (push) Successful in 59s
Release / web-build (push) Successful in 1m24s
Release / android-build (push) Successful in 6m13s
Release / release-master (push) Successful in 8s
Release / release-dev (push) Successful in 13s
This commit is contained in:
@@ -4,6 +4,18 @@ import 'package:http/http.dart' as http;
|
||||
typedef TokenProvider = String? Function();
|
||||
typedef UnauthorizedHandler = Future<bool> Function();
|
||||
|
||||
class MultipartFilePayload {
|
||||
MultipartFilePayload({
|
||||
required this.bytes,
|
||||
required this.filename,
|
||||
this.fieldName,
|
||||
});
|
||||
|
||||
final List<int> bytes;
|
||||
final String filename;
|
||||
final String? fieldName;
|
||||
}
|
||||
|
||||
class ApiService {
|
||||
String _baseUrl;
|
||||
final http.Client _client;
|
||||
@@ -192,6 +204,41 @@ class ApiService {
|
||||
return _processResponse(response);
|
||||
}
|
||||
|
||||
Future<dynamic> postMultipartFiles(
|
||||
String endpoint, {
|
||||
required List<MultipartFilePayload> files,
|
||||
String fieldName = 'files',
|
||||
Map<String, String>? fields,
|
||||
Map<String, String>? headers,
|
||||
bool includeAuth = true,
|
||||
bool allowRetry = true,
|
||||
}) async {
|
||||
Future<http.Response> send() async {
|
||||
final request = http.MultipartRequest(
|
||||
'POST',
|
||||
Uri.parse('$baseUrl$endpoint'),
|
||||
);
|
||||
request.headers.addAll(_buildHeaders(headers, includeAuth: includeAuth));
|
||||
if (fields != null && fields.isNotEmpty) {
|
||||
request.fields.addAll(fields);
|
||||
}
|
||||
for (final file in files) {
|
||||
request.files.add(
|
||||
http.MultipartFile.fromBytes(
|
||||
file.fieldName ?? fieldName,
|
||||
file.bytes,
|
||||
filename: file.filename,
|
||||
),
|
||||
);
|
||||
}
|
||||
final streamed = await _client.send(request);
|
||||
return http.Response.fromStream(streamed);
|
||||
}
|
||||
|
||||
final response = await _sendWithRetry(send, allowRetry: allowRetry);
|
||||
return _processResponse(response);
|
||||
}
|
||||
|
||||
Future<dynamic> postForm(
|
||||
String endpoint,
|
||||
Map<String, String> data, {
|
||||
|
||||
Reference in New Issue
Block a user