uploadAvatar method

Future<String> uploadAvatar(
  1. Uint8List imageBytes,
  2. String? oldFilename
)

Uploads a new profile photo to NTUT Portal, replacing the current one.

oldFilename should be the current avatar filename (from UserDto.avatarFilename, or empty string if none).

Returns the new avatar filename assigned by the server.

Implementation

Future<String> uploadAvatar(Uint8List imageBytes, String? oldFilename) async {
  final response = await _portalDio.post(
    'photoUpload.do',
    queryParameters: {
      'uploadQuota': '20', // max file size in MB
      // current avatar filename for server-side cleanup
      'ldapPhoto': oldFilename ?? '',
    },
    data: FormData.fromMap({
      'file[]': MultipartFile.fromBytes(
        imageBytes,
        filename: 'avatar.jpg', // required by server
        contentType: DioMediaType('application', 'octet-stream'),
      ),
    }),
  );

  final body = jsonDecode(response.data);
  return body['ldapPhoto'];
}