sendFile method
파일 전송
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;
}