sendFile method

Future<Channel> sendFile(
  1. UploadFileModel file
)

파일 전송

Implementation

Future<Channel> sendFile(UploadFileModel file) async {
  /// 파일 업로드 크기 제한 = 100MB
  const fileSizeLimit = 100 * 1024 * 1024;

  var uri = ApiPath.saveFile.toUri();
  var request = MultipartRequest('POST', uri);

  var ext = file.name.split(".").last;
  if (ext.length > 5) {
    throw VChatCloudError.fromResult(VChatCloudResult.incorrectRequest,
        message: "지원하지 않는 확장자입니다.");
  }
  if (await file.size > fileSizeLimit) {
    throw VChatCloudError.fromResult(VChatCloudResult.incorrectRequest,
        message: "파일 업로드 제한 100MB를 초과하였습니다.");
  }

  request.fields['roomId'] = roomId;
  if (kIsWeb && file.isByte) {
    request.files.add(
      MultipartFile.fromBytes("file", file.bytes!, filename: file.name),
    );
  } else if (file.isFile) {
    request.files.add(await MultipartFile.fromPath(
      "file",
      file.file!.path,
      filename: file.name,
    ));
  }

  var response = await request.send();
  var byteJson = await response.stream.bytesToString();
  var uploadFile = FileModel.fromJson(json.decode(byteJson)['data']);

  _send({
    "type": "send",
    "address": "c2s.send.message",
    "headers": {},
    "body": {
      "roomId": roomId,
      "nickName": user?.nickName,
      "clientKey": user?.clientKey,
      "mimeType": MimeType.file.type,
      "grade": user?.grade,
      "message": json.encode([
        {
          "id": uploadFile.fileKey,
          "name": uploadFile.fileNm,
          "type": uploadFile.fileExt,
          "size": uploadFile.fileSize,
          "expire": uploadFile.expire,
        }
      ]),
      "messageType": json.encode(user?.userInfo),
      "replyAddress": null,
    },
  });

  return this;
}