You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.6 KiB
93 lines
3.6 KiB
|
|
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;
|
|
|
|
namespace Tiobon.Core.Services
|
|
{
|
|
/// <summary>
|
|
/// 附件 (服务)
|
|
/// </summary>
|
|
public class Ghre_AttachmentServices : BaseServices<Ghre_Attachment, Ghre_AttachmentDto, InsertGhre_AttachmentInput, EditGhre_AttachmentInput>, IGhre_AttachmentServices
|
|
{
|
|
private readonly IBaseRepository<Ghre_Attachment> _dal;
|
|
public Ghre_AttachmentServices(IBaseRepository<Ghre_Attachment> dal)
|
|
{
|
|
this._dal = dal;
|
|
base.BaseDal = dal;
|
|
}
|
|
|
|
public async Task<dynamic> UploadVideoAsync(IFormFile file, string fileName, int chunkIndex, int totalChunks, string id)
|
|
{
|
|
dynamic obj = new ExpandoObject();
|
|
string status = "error";
|
|
string message = string.Empty;
|
|
string pathHeader = string.Empty;
|
|
string url = string.Empty;
|
|
|
|
try
|
|
{
|
|
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}"))
|
|
{
|
|
await file.CopyToAsync(stream);
|
|
}
|
|
|
|
if (chunkIndex == totalChunks - 1)
|
|
await FileMerge(id, ".mp4", SnowFlakeSingle.Instance.NextId());
|
|
|
|
status = "ok";
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
message = E.Message;
|
|
}
|
|
obj.url = url;
|
|
obj.status = status;
|
|
obj.message = message;
|
|
return obj;
|
|
}
|
|
|
|
public static async Task<object> FileMerge(string lastModified, string fileExts, long NewfileName)
|
|
{
|
|
string erro = "";
|
|
bool ok = false;
|
|
try
|
|
{
|
|
string wwwroot = $"{Directory.GetCurrentDirectory()}/wwwroot/";
|
|
var temporary = Path.Combine(wwwroot, lastModified);//临时文件夹
|
|
//fileName = Request.Form["fileName"];//文件名
|
|
string fileExt = fileExts;//获取文件后缀
|
|
var files = Directory.GetFiles(temporary);//获得下面的所有文件
|
|
DirectoryInfo di = new DirectoryInfo(wwwroot + NewfileName + "/");
|
|
if (!di.Exists)
|
|
di.Create();
|
|
|
|
var finalPath = Path.Combine(wwwroot + lastModified + "/", NewfileName + fileExt);//最终的文件名(demo中保存的是它上传时候的文件名,实际操作肯定不能这样)
|
|
var fs = new FileStream(finalPath, FileMode.Create);
|
|
foreach (var part in files.OrderBy(x => x.Length).ThenBy(x => x))//排一下序,保证从0-N Write
|
|
{
|
|
var bytes = File.ReadAllBytes(part);
|
|
await fs.WriteAsync(bytes, 0, bytes.Length);
|
|
bytes = null;
|
|
//System.IO.File.Delete(part);//删除分块
|
|
}
|
|
fs.Close();
|
|
|
|
//Directory.Delete(temporary);//删除文件夹
|
|
ok = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
erro = ex.Message;
|
|
}
|
|
return ok;
|
|
}
|
|
}
|
|
} |