syntax = "proto3"; package file; option go_package = "./pb"; // 文件上传的元数据信息 message UploadFileMetadataReq { string fileName = 1; int64 fileSize = 2; string fileType = 3; // avatar, chat, etc. string userId = 4; bytes fileData = 5; // 如果文件很小可以直接传,大文件建议API层直接传S3,RPC只传元数据 } message UploadFileResp { string url = 1; string fileId = 2; } message GetFileUrlReq { string fileId = 1; string userId = 2; // 用于鉴权 } message GetFileUrlResp { string url = 1; // 可能是带签名的临时 URL } service FileService { // 简单上传(适合小文件,或保存元数据) rpc Upload(UploadFileMetadataReq) returns (UploadFileResp); // 获取文件访问链接(处理私有文件的鉴权) rpc GetFileUrl(GetFileUrlReq) returns (GetFileUrlResp); }