diff --git a/Tiobon.Core.Api/Controllers/FileController.cs b/Tiobon.Core.Api/Controllers/FileController.cs
index ea7659e0..764bfdb7 100644
--- a/Tiobon.Core.Api/Controllers/FileController.cs
+++ b/Tiobon.Core.Api/Controllers/FileController.cs
@@ -209,17 +209,12 @@ public class FileController : BaseApiController
///
/// 分片上传
///
- ///
- ///
- ///
- ///
- ///
+ ///
///
[HttpPost("UploadLarge")]
- public async Task UploadLargeAsync(IFormFile file, string fileName, int chunkIndex, int totalChunks, string id)
+ public async Task> UploadLargeAsync([FromForm] ChunkUpload upload)
{
- dynamic obj = await _ghre_AttachmentServices.UploadVideoAsync(file, fileName, chunkIndex, totalChunks, id);
- return Ok(obj);
+ return await _ghre_AttachmentServices.UploadVideoAsync(upload);
}
#endregion
diff --git a/Tiobon.Core.Api/Tiobon.Core.xml b/Tiobon.Core.Api/Tiobon.Core.xml
index 04dab34a..94b1f492 100644
--- a/Tiobon.Core.Api/Tiobon.Core.xml
+++ b/Tiobon.Core.Api/Tiobon.Core.xml
@@ -377,15 +377,11 @@
主键ID
-
+
分片上传
-
-
-
-
-
+
diff --git a/Tiobon.Core.IServices/Ghre/IGhre_AttachmentServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_AttachmentServices.cs
index e01da876..f9f8bb82 100644
--- a/Tiobon.Core.IServices/Ghre/IGhre_AttachmentServices.cs
+++ b/Tiobon.Core.IServices/Ghre/IGhre_AttachmentServices.cs
@@ -1,15 +1,16 @@
-using Microsoft.AspNetCore.Http;
-using Tiobon.Core.IServices.BASE;
+using Tiobon.Core.IServices.BASE;
+using Tiobon.Core.Model;
using Tiobon.Core.Model.Models;
+using Tiobon.Core.Model.ViewModels;
namespace Tiobon.Core.IServices
-{
- ///
- /// 附件(自定义服务接口)
- ///
+{
+ ///
+ /// 附件(自定义服务接口)
+ ///
public interface IGhre_AttachmentServices :IBaseServices
{
- Task UploadVideoAsync(IFormFile file, string fileName, int chunkIndex, int totalChunks, string id);
+ Task> UploadVideoAsync(ChunkUpload upload);
}
}
\ No newline at end of file
diff --git a/Tiobon.Core.Model/ViewModels/Extend/ChunkUpload.cs b/Tiobon.Core.Model/ViewModels/Extend/ChunkUpload.cs
new file mode 100644
index 00000000..1c015f12
--- /dev/null
+++ b/Tiobon.Core.Model/ViewModels/Extend/ChunkUpload.cs
@@ -0,0 +1,13 @@
+using Microsoft.AspNetCore.Http;
+
+namespace Tiobon.Core.Model;
+
+public class ChunkUpload
+{
+ public IFormFile file { get; set; }
+
+ public string fileName { get; set; } = null;
+ public int chunkIndex { get; set; }
+ public int totalChunks { get; set; }
+ public string id { get; set; } = null;
+}
\ No newline at end of file
diff --git a/Tiobon.Core.Services/Ghre/Ghre_AttachmentServices.cs b/Tiobon.Core.Services/Ghre/Ghre_AttachmentServices.cs
index f8c80af5..d3241d3c 100644
--- a/Tiobon.Core.Services/Ghre/Ghre_AttachmentServices.cs
+++ b/Tiobon.Core.Services/Ghre/Ghre_AttachmentServices.cs
@@ -3,9 +3,14 @@ using Tiobon.Core.IServices;
using Tiobon.Core.Model.Models;
using Tiobon.Core.Services.BASE;
using Tiobon.Core.IRepository.Base;
-using Microsoft.AspNetCore.Http;
using System.Dynamic;
using SqlSugar;
+using Tiobon.Core.Model;
+using Tiobon.Core.DataAccess;
+using NPOI.HPSF;
+using SharpCompress.Common;
+using Tiobon.Core.Common;
+using Tiobon.Core.Model.ViewModels;
namespace Tiobon.Core.Services
{
@@ -21,37 +26,62 @@ namespace Tiobon.Core.Services
base.BaseDal = dal;
}
- public async Task UploadVideoAsync(IFormFile file, string fileName, int chunkIndex, int totalChunks, string id)
+ public async Task> UploadVideoAsync(ChunkUpload upload)
{
- dynamic obj = new ExpandoObject();
- string status = "error";
- string message = string.Empty;
- string pathHeader = string.Empty;
- string url = string.Empty;
+ var file = upload.file;
+ var path = $"{$"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot{Path.DirectorySeparatorChar}files{Path.DirectorySeparatorChar}upload{Path.DirectorySeparatorChar}{upload.id}{Path.DirectorySeparatorChar}"}";
+ if (!Directory.Exists(path))
+ Directory.CreateDirectory(path);
+ using (var stream = File.Create(path + $"{upload.chunkIndex}"))
+ {
+ await file.CopyToAsync(stream);
+ }
- try
+ if (upload.chunkIndex == upload.totalChunks - 1)
{
- var path = $"{$"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot{Path.DirectorySeparatorChar}files{Path.DirectorySeparatorChar}upload{Path.DirectorySeparatorChar}{id}{Path.DirectorySeparatorChar}"}";
- if (!Directory.Exists(path))
- Directory.CreateDirectory(path);
- using (var stream = File.Create(path + $"{chunkIndex}"))
+ var id = SnowFlakeSingle.Instance.NextId();
+ await FileMerge(upload.id, ".mp4", id);
+ using var _context = ContextFactory.CreateContext();
+
+ var ext = string.Empty;
+ if (string.IsNullOrEmpty(file.FileName) == false)
{
- await file.CopyToAsync(stream);
+ var dotPos = upload.fileName.LastIndexOf('.');
+ ext = upload.fileName.Substring(dotPos + 1);
}
-
- if (chunkIndex == totalChunks - 1)
- await FileMerge(id, ".mp4", SnowFlakeSingle.Instance.NextId());
-
- status = "ok";
- }
- catch (Exception E)
- {
- message = E.Message;
+ var filePath = $"/files/upload/{id}.{ext}";
+ var fileAttachment = new Ghre_Attachment();
+ fileAttachment.Id = SnowFlakeSingle.Instance.NextId();
+ fileAttachment.AttachmentNo = upload.file.FileName;
+ fileAttachment.AttachFileName = upload.file.FileName;
+ fileAttachment.CreateBy = App.User.ID;
+ fileAttachment.CreateTime = DateTime.Now;
+ fileAttachment.AttachmentName = upload.fileName;
+ fileAttachment.AttachFileExtension = ext;
+ fileAttachment.AttachFileSize = upload.file.Length;
+ fileAttachment.PhysicsPath = filePath;
+ fileAttachment.RelativePath = filePath;
+ fileAttachment.FileURL = filePath;
+ fileAttachment.ThumbnailPath = filePath;
+ fileAttachment.AttachmentType = upload.file.ContentType;
+ //url = fileName + "." + ext;
+ _context.Add(fileAttachment);
+ _context.SaveChanges();
+ return ServiceResult.OprateSuccess("", new FileUploadResult()
+ {
+ Id = fileAttachment.Id,
+ AttachFileExtension = fileAttachment.AttachFileExtension,
+ AttachFileName = fileAttachment.AttachFileName,
+ AttachmentName = fileAttachment.AttachmentName,
+ AttachmentNo = fileAttachment.AttachmentNo,
+ FileURL = fileAttachment.FileURL,
+ PhysicsPath = fileAttachment.PhysicsPath,
+ RelativePath = fileAttachment.RelativePath,
+ ThumbnailPath = fileAttachment.ThumbnailPath,
+ AttachFileSize = fileAttachment.AttachFileSize,
+ });
}
- obj.url = url;
- obj.status = status;
- obj.message = message;
- return obj;
+ return ServiceResult.OprateSuccess("", null);
}
public static async Task
-
+
分片上传
-
-
-
-
-
+