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

发布于:2025-08-03 ⋅ 阅读:(12) ⋅ 点赞:(0)

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

    }
    // DTOs
    public 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; }
    }
}