当前位置: 首页 > news >正文

1分钟临时共享空间在线小工具实现

运行效果: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; }}
}

http://www.dtcms.com/a/311447.html

相关文章:

  • 存储成本深度优化:冷热分层与生命周期管理——从视频平台年省200万实践解析智能存储架构
  • Qt 实战教程:使用 QNetworkAccessManager 发送 HTTP POST
  • SM2国密算法的大数运算原理详解
  • (吃饭)质数时间
  • 防御保护综合案例
  • 二分查找:高效搜索有序数组
  • 【论文笔记】Multi-Behavior Graph Neural Networks for Recommender System
  • 深度学习loss总结(二)
  • [硬件电路-116]:模拟电路 - 信号处理电路 - 程控增益放大器
  • Batch Normalization(BN):深度学习中的“训练加速器”与实践指南
  • LLM Prompt与开源模型资源(3)如何写一个好的 Prompt
  • 【转】大模型安全治理的现状与展望
  • 【REACT18.x】使用vite创建的项目无法启动,报错TypeError: crypto.hash is not a function解决方法
  • SpringCloud实战:机器人对战系统架构
  • 【LeetCode 热题 100】739. 每日温度——(解法一)单调栈+从右到左
  • STL 算法与迭代器终极指南:从基础到高级应用
  • 函数指针——回调函数
  • 文件同步神器-rsync命令讲解
  • ESP32- 项目应用1 智能手表之功能补全 #5
  • UDP通信中BIND端口号的作用解析,LOCALPORT的关系解析
  • 代码随想录刷题Day23
  • verilog的学习
  • 高效游戏状态管理:使用双模式位运算与数学运算
  • 从基础功能到自主决策, Agent 开发进阶路怎么走?
  • 技巧|SwanLab记录ROC曲线攻略
  • VueX进阶Pinia
  • go idea goland debug 报错 no debug info found
  • 从递归到动态规划-解码方法
  • Json Jsoncpp
  • 深入 Go 底层原理(十四):timer 的实现与高性能定时器