運行效果:1分鐘臨時共享空間 - 免注冊即時文件文本共享工具 | 極速傳
直接上代碼:
?
using Microsoft.AspNetCore.Mvc;
using SaaS.OfficialWebSite.Web.Utils;
using ZXing.QrCode;
using ZXing;
using SkiaSharp;
using ZXing.SkiaSharp.Rendering;
using ZXing.Common;
using ZXing.QrCode.Internal;namespace SaaS.OfficialWebSite.Web.Controllers
{public class ShareSpaceController : Controller{public IActionResult Index(){if (string.IsNullOrEmpty(HttpContext.Session.GetString("CurrentUser"))){HttpContext.Session.SetString("CurrentUser", Guid.NewGuid().ToString("N"));}return View();}private readonly ISpaceService _spaceService;public ShareSpaceController(ISpaceService spaceService){_spaceService = spaceService;}[HttpGet("GenerateQrCode")]public IActionResult GenerateQrCode([FromQuery] string content){if (string.IsNullOrWhiteSpace(content)){return BadRequest("內容不能為空");}try{var qrCodeBytes = GenerateQrCodeImg(content);return File(qrCodeBytes, "image/png");}catch (Exception ex){return StatusCode(500, $"生成二維碼失敗: {ex.Message}");}}public byte[] GenerateQrCodeImg(string content, int width = 300, int height = 300){// 解析顏色var foreground = SKColors.Black;var background = SKColors.White;// 創建渲染器var renderer = new SKBitmapRenderer();renderer.Foreground = foreground;renderer.Background = background;// 配置條形碼寫入器var barcodeWriter = new BarcodeWriter<SKBitmap>{Format = BarcodeFormat.QR_CODE,Options = new EncodingOptions{Width = width,Height = height,Margin = 2,PureBarcode = true},Renderer = renderer // 使用配置好的渲染器};barcodeWriter.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);// 生成條形碼/二維碼var barcodeBitmap = barcodeWriter.Write(content);// 將圖像轉換為內存流using (var image = SKImage.FromBitmap(barcodeBitmap))using (var data = image.Encode(SKEncodedImageFormat.Png, 100))using (var memoryStream = new MemoryStream()){data.SaveTo(memoryStream);memoryStream.Seek(0, SeekOrigin.Begin);return memoryStream.ToArray();}}[HttpGet("GetUserSpaces")]public async Task<IActionResult> GetUserSpaces(){// 這里應該從認證中獲取用戶ID,示例使用固定值var userId = HttpContext.Session.GetString("CurrentUser");var spaces = await _spaceService.GetUserSpaces(userId);return Ok(SpaceApiResponse<IEnumerable<Space>>.Ok(spaces));}[HttpGet("GetSpace")]public async Task<IActionResult> GetSpace([FromQuery] string id){var space = await _spaceService.GetSpace(id);if (space == null){return NotFound(SpaceApiResponse<Space>.Fail("空間不存在"));}// 檢查用戶是否有權限訪問var userId = HttpContext.Session.GetString("CurrentUser");if (space.OwnerId != userId && !space.MemberIds.Contains(userId)){return Unauthorized(SpaceApiResponse<Space>.Fail("無權訪問此空間"));}return Ok(SpaceApiResponse<Space>.Ok(space));}[HttpPost("CreateSpace")]public async Task<IActionResult> CreateSpace([FromForm] CreateSpaceRequest request){if (string.IsNullOrWhiteSpace(request.Name)){return BadRequest(SpaceApiResponse<Space>.Fail("空間名稱不能為空"));}var userId = HttpContext.Session.GetString("CurrentUser");var space = await _spaceService.CreateSpace(request.Name, userId);return Ok(SpaceApiResponse<Space>.Ok(space));}[HttpDelete("DeleteSpace")]public async Task<IActionResult> DeleteSpace([FromQuery] string id){var space = await _spaceService.GetSpace(id);if (space == null){return NotFound(SpaceApiResponse<bool>.Fail("空間不存在"));}// 檢查用戶是否有權限刪除var userId = HttpContext.Session.GetString("CurrentUser");if (space.OwnerId != userId){return Unauthorized(SpaceApiResponse<bool>.Fail("無權刪除此空間"));}var result = await _spaceService.DeleteSpace(id);return Ok(SpaceApiResponse<bool>.Ok(result));}[HttpPost("JoinSpace")]public async Task<IActionResult> JoinSpace([FromQuery] string id){var space = await _spaceService.GetSpace(id);if (space == null){return Ok(SpaceApiResponse<bool>.Fail("空間不存在"));}var userId = HttpContext.Session.GetString("CurrentUser");if (space.OwnerId == userId || space.MemberIds.Contains(userId)){return Ok(SpaceApiResponse<Space>.Ok(space));}var result = await _spaceService.AddUserToSpace(id, userId);return Ok(SpaceApiResponse<Space>.Ok(space));}[HttpGet("GetSpaceItems")]public async Task<IActionResult> GetSpaceItems([FromQuery] string id){var space = await _spaceService.GetSpace(id);if (space == null){return NotFound(SpaceApiResponse<object>.Fail("空間不存在"));}// 檢查用戶是否有權限訪問var userId = HttpContext.Session.GetString("CurrentUser");if (space.OwnerId != userId && !space.MemberIds.Contains(userId)){return Unauthorized(SpaceApiResponse<object>.Fail("無權訪問此空間"));}var items = await _spaceService.GetSpaceItems(id);return Ok(SpaceApiResponse<object>.Ok(new{name = space.Name,items = items}));}[HttpPost("AddTextItem")]public async Task<IActionResult> AddTextItem([FromForm] AddTextItemRequest request){if (string.IsNullOrWhiteSpace(request.Title) || string.IsNullOrWhiteSpace(request.Content)){return BadRequest(SpaceApiResponse<TextItem>.Fail("標題和內容不能為空"));}// 檢查空間是否存在和權限var space = await _spaceService.GetSpace(request.SpaceId);if (space == null){return NotFound(SpaceApiResponse<TextItem>.Fail("空間不存在"));}var userId = HttpContext.Session.GetString("CurrentUser");if (space.OwnerId != userId && !space.MemberIds.Contains(userId)){return Unauthorized(SpaceApiResponse<TextItem>.Fail("無權在此空間添加內容"));}var textItem = await _spaceService.AddTextItem(request.SpaceId,request.Title,request.Content,userId);return Ok(SpaceApiResponse<TextItem>.Ok(textItem));}[HttpPost("UploadFile")]public async Task<IActionResult> UploadFile([FromForm] IFormFile file, [FromForm] string spaceId){if (file == null || file.Length == 0){return BadRequest(SpaceApiResponse<FileItem>.Fail("文件不能為空"));}// 檢查空間是否存在和權限var space = await _spaceService.GetSpace(spaceId);if (space == null){return NotFound(SpaceApiResponse<FileItem>.Fail("空間不存在"));}var userId = HttpContext.Session.GetString("CurrentUser");if (space.OwnerId != userId && !space.MemberIds.Contains(userId)){return Unauthorized(SpaceApiResponse<FileItem>.Fail("無權在此空間上傳文件"));}var fileItem = await _spaceService.AddFileItem(spaceId, file, userId);return Ok(SpaceApiResponse<FileItem>.Ok(fileItem));}[HttpDelete("DeleteItem")]public async Task<IActionResult> DeleteItem([FromQuery] string spaceId, [FromQuery] string type, [FromQuery] string id){if (type != "text" && type != "file"){return BadRequest(SpaceApiResponse<bool>.Fail("無效的類型"));}var item = (await _spaceService.GetSpaceItems(spaceId)).FirstOrDefault(i => i.Id == id && i.Type == type);if (item == null){return NotFound(SpaceApiResponse<bool>.Fail("內容不存在"));}// 檢查權限var userId = HttpContext.Session.GetString("CurrentUser");if (item.CreatorId != userId){// 如果是空間所有者也可以刪除var space = await _spaceService.GetSpace(item.SpaceId);if (space?.OwnerId != userId){return Unauthorized(SpaceApiResponse<bool>.Fail("無權刪除此內容"));}}var result = await _spaceService.DeleteItem(id, type);return Ok(SpaceApiResponse<bool>.Ok(result));}}// DTOspublic class CreateSpaceRequest{public string Name { get; set; }}public class AddTextItemRequest{public string SpaceId { get; set; }public string Title { get; set; }public string Content { get; set; }}
}