Browse Source

feat(oss): 使用 IRemoteStreamContent 替代 IFormFile

pull/399/head
cKey 4 years ago
parent
commit
d8f808e8dd
  1. 10
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/CreateOssObjectInput.cs
  2. 6
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileAppService.cs
  3. 6
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IStaticFilesAppService.cs
  4. 4
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileChunkInput.cs
  5. 4
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileInput.cs
  6. 27
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileAppServiceBase.cs
  7. 10
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs
  8. 14
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs
  9. 6
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectAppService.cs
  10. 4
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PrivateFileAppService.cs
  11. 3
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PublicFileAppService.cs
  12. 6
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/StaticFilesAppService.cs
  13. 15
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs
  14. 98
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PrivateFilesController.cs
  15. 78
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PublicFilesController.cs
  16. 71
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/StaticFilesController.cs
  17. 37
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/UploadOssObjectInput.cs

10
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/CreateOssObjectInput.cs

@ -1,6 +1,7 @@
using System;
using System.IO;
using Volo.Abp.Auditing;
using Volo.Abp.Content;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.OssManagement
@ -9,18 +10,19 @@ namespace LINGYUN.Abp.OssManagement
{
public string Bucket { get; set; }
public string Path { get; set; }
public string Object { get; set; }
public string FileName { get; set; }
public bool Overwrite { get; set; }
[DisableAuditing]
[DisableValidation]
public Stream Content { get; set; }
public IRemoteStreamContent File { get; set; }
public TimeSpan? ExpirationTime { get; set; }
public void SetContent(Stream content)
{
Content = content;
Content?.Seek(0, SeekOrigin.Begin);
content.Seek(0, SeekOrigin.Begin);
File = new RemoteStreamContent(content);
}
}
}

6
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileAppService.cs

@ -1,7 +1,7 @@
using System.IO;
using System.Threading.Tasks;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Content;
namespace LINGYUN.Abp.OssManagement
{
@ -9,7 +9,7 @@ namespace LINGYUN.Abp.OssManagement
{
Task<OssObjectDto> UploadAsync(UploadFileInput input);
Task<Stream> GetAsync(GetPublicFileInput input);
Task<IRemoteStreamContent> GetAsync(GetPublicFileInput input);
Task<ListResultDto<OssObjectDto>> GetListAsync(GetFilesInput input);

6
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IStaticFilesAppService.cs

@ -1,11 +1,11 @@
using System.IO;
using System.Threading.Tasks;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Content;
namespace LINGYUN.Abp.OssManagement
{
public interface IStaticFilesAppService: IApplicationService
{
Task<Stream> GetAsync(GetStaticFileInput input);
Task<IRemoteStreamContent> GetAsync(GetStaticFileInput input);
}
}

4
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileChunkInput.cs

@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations;
using System.IO;
using Volo.Abp.Auditing;
using Volo.Abp.Content;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.OssManagement
@ -36,6 +36,6 @@ namespace LINGYUN.Abp.OssManagement
[DisableAuditing]
[DisableValidation]
public Stream Content { get; set; }
public IRemoteStreamContent File { get; set; }
}
}

4
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileInput.cs

@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations;
using System.IO;
using Volo.Abp.Auditing;
using Volo.Abp.Content;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.OssManagement
@ -14,6 +14,6 @@ namespace LINGYUN.Abp.OssManagement
[Required]
[DisableAuditing]
[DisableValidation]
public Stream Content { get; set; }
public IRemoteStreamContent File { get; set; }
}
}

27
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileAppServiceBase.cs

@ -2,11 +2,14 @@
using LINGYUN.Abp.OssManagement.Features;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Threading.Tasks;
using System.Web;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Content;
using Volo.Abp.Features;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.OssManagement
{
@ -33,7 +36,7 @@ namespace LINGYUN.Abp.OssManagement
new UploadFileChunkInput
{
Bucket = GetCurrentBucket(),
Content = input.Content,
File = input.File,
FileName = input.FileName,
TotalSize = input.TotalSize,
ChunkSize = input.ChunkSize,
@ -51,9 +54,14 @@ namespace LINGYUN.Abp.OssManagement
LimitPolicy.Month)]
public virtual async Task<OssObjectDto> UploadAsync(UploadFileInput input)
{
if (!input.File.ContentLength.HasValue)
{
ThrowValidationException(L["FileNotBeNullOrEmpty"], "File");
}
await FileValidater.ValidationAsync(new UploadFile
{
TotalSize = input.Content.Length,
TotalSize = input.File.ContentLength.Value,
FileName = input.Object
});
@ -62,7 +70,7 @@ namespace LINGYUN.Abp.OssManagement
var createOssObjectRequest = new CreateOssObjectRequest(
GetCurrentBucket(),
HttpUtility.UrlDecode(input.Object),
input.Content,
input.File.GetStream(),
GetCurrentPath(HttpUtility.UrlDecode(input.Path)))
{
Overwrite = input.Overwrite
@ -91,7 +99,7 @@ namespace LINGYUN.Abp.OssManagement
AbpOssManagementFeatureNames.OssObject.DownloadLimit,
AbpOssManagementFeatureNames.OssObject.DownloadInterval,
LimitPolicy.Month)]
public virtual async Task<Stream> GetAsync(GetPublicFileInput input)
public virtual async Task<IRemoteStreamContent> GetAsync(GetPublicFileInput input)
{
var ossObjectRequest = new GetOssObjectRequest(
GetCurrentBucket(),
@ -106,7 +114,7 @@ namespace LINGYUN.Abp.OssManagement
var ossContainer = OssContainerFactory.Create();
var ossObject = await ossContainer.GetObjectAsync(ossObjectRequest);
return ossObject.Content;
return new RemoteStreamContent(ossObject.Content);
}
public virtual async Task DeleteAsync(GetPublicFileInput input)
@ -134,5 +142,14 @@ namespace LINGYUN.Abp.OssManagement
path = path.RemovePreFix(".").RemovePreFix("/");
return path;
}
private static void ThrowValidationException(string message, string memberName)
{
throw new AbpValidationException(message,
new List<ValidationResult>
{
new ValidationResult(message, new[] {memberName})
});
}
}
}

10
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs

@ -40,23 +40,23 @@ namespace LINGYUN.Abp.OssManagement
LimitPolicy.Month)]
public virtual async Task<OssObject> MergeAsync(CreateOssObjectInput input)
{
if (input.Content.IsNullOrEmpty())
if (!input.File.ContentLength.HasValue)
{
ThrowValidationException(_stringLocalizer["FileNotBeNullOrEmpty"], "File");
}
await _fileValidater.ValidationAsync(new UploadFile
{
TotalSize = input.Content.Length,
FileName = input.Object
TotalSize = input.File.ContentLength.Value,
FileName = input.FileName
});
var oss = CreateOssContainer();
var createOssObjectRequest = new CreateOssObjectRequest(
input.Bucket,
input.Object,
input.Content,
input.FileName,
input.File.GetStream(),
input.Path,
input.ExpirationTime)
{

14
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs

@ -44,24 +44,27 @@ namespace LINGYUN.Abp.OssManagement
// 以上传的分片索引创建临时文件
var tempSavedFile = Path.Combine(tempFilePath, $"{input.ChunkNumber}.upd");
if (input.Content != null)
if (input.File != null)
{
// 保存临时文件
using var fs = new FileStream(tempSavedFile, FileMode.Create, FileAccess.Write);
using (var fs = new FileStream(tempSavedFile, FileMode.Create, FileAccess.Write))
{
// 写入当前分片文件
await input.Content.CopyToAsync(fs);
await input.File.GetStream().CopyToAsync(fs);
}
}
if (input.ChunkNumber == input.TotalChunks)
{
var mergeTmpFile = Path.Combine(tempFilePath, input.FileName);
// 创建临时合并文件流
using var mergeFileStream = new FileStream(mergeTmpFile, FileMode.Create, FileAccess.ReadWrite);
using (var mergeFileStream = new FileStream(mergeTmpFile, FileMode.Create, FileAccess.ReadWrite))
{
var createOssObjectInput = new CreateOssObjectInput
{
Bucket = input.Bucket,
Path = input.Path,
Object = input.FileName
FileName = input.FileName
};
// 合并文件
var mergeSavedFile = Path.Combine(tempFilePath, $"{input.FileName}");
@ -81,6 +84,7 @@ namespace LINGYUN.Abp.OssManagement
createOssObjectInput.SetContent(mergeFileStream);
// 分离出合并接口,合并时计算上传次数
await _fileUploadMerger.MergeAsync(createOssObjectInput);
}
// 文件保存之后删除临时文件目录
DirectoryHelper.DeleteIfExists(tempFilePath, true);
}

6
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectAppService.cs

@ -24,13 +24,13 @@ namespace LINGYUN.Abp.OssManagement
public virtual async Task<OssObjectDto> CreateAsync(CreateOssObjectInput input)
{
// 内容为空时建立目录
if (input.Content.IsNullOrEmpty())
if (input.File.ContentLength.HasValue)
{
var oss = CreateOssContainer();
var request = new CreateOssObjectRequest(
HttpUtility.UrlDecode(input.Bucket),
HttpUtility.UrlDecode(input.Object),
input.Content,
HttpUtility.UrlDecode(input.FileName),
Stream.Null,
HttpUtility.UrlDecode(input.Path));
var ossObject = await oss.CreateObjectAsync(request);

4
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PrivateFileAppService.cs

@ -2,11 +2,11 @@
using Microsoft.Extensions.Caching.Distributed;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using System.Web;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Caching;
using Volo.Abp.Content;
using Volo.Abp.IO;
using Volo.Abp.Users;
@ -37,7 +37,7 @@ namespace LINGYUN.Abp.OssManagement
}
[Authorize]
public override async Task<Stream> GetAsync(GetPublicFileInput input)
public override async Task<IRemoteStreamContent> GetAsync(GetPublicFileInput input)
{
return await base.GetAsync(input);
}

3
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PublicFileAppService.cs

@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Authorization;
using System.IO;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Content;
using Volo.Abp.Features;
namespace LINGYUN.Abp.OssManagement
@ -63,7 +64,7 @@ namespace LINGYUN.Abp.OssManagement
AbpOssManagementFeatureNames.OssObject.DownloadLimit,
AbpOssManagementFeatureNames.OssObject.DownloadInterval,
LimitPolicy.Month)]
public override async Task<Stream> GetAsync(GetPublicFileInput input)
public override async Task<IRemoteStreamContent> GetAsync(GetPublicFileInput input)
{
await CheckPublicAccessAsync();
await FeatureChecker.CheckEnabledAsync(AbpOssManagementFeatureNames.OssObject.DownloadFile);

6
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/StaticFilesAppService.cs

@ -1,8 +1,8 @@
using LINGYUN.Abp.Features.LimitValidation;
using LINGYUN.Abp.OssManagement.Features;
using System.IO;
using System.Threading.Tasks;
using System.Web;
using Volo.Abp.Content;
using Volo.Abp.Features;
namespace LINGYUN.Abp.OssManagement
@ -22,7 +22,7 @@ namespace LINGYUN.Abp.OssManagement
AbpOssManagementFeatureNames.OssObject.DownloadLimit,
AbpOssManagementFeatureNames.OssObject.DownloadInterval,
LimitPolicy.Month)]
public virtual async Task<Stream> GetAsync(GetStaticFileInput input)
public virtual async Task<IRemoteStreamContent> GetAsync(GetStaticFileInput input)
{
var ossObjectRequest = new GetOssObjectRequest(
HttpUtility.UrlDecode(input.Bucket), // 需要处理特殊字符
@ -36,7 +36,7 @@ namespace LINGYUN.Abp.OssManagement
var ossContainer = OssContainerFactory.Create();
var ossObject = await ossContainer.GetObjectAsync(ossObjectRequest);
return ossObject.Content;
return new RemoteStreamContent(ossObject.Content, ossObject.Name);
}
}
}

15
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs

@ -34,20 +34,9 @@ namespace LINGYUN.Abp.OssManagement
[Route("upload")]
[DisableAuditing]
[Authorize(AbpOssManagementPermissions.OssObject.Create)]
public virtual async Task UploadAsync([FromForm] UploadOssObjectInput input)
public virtual async Task UploadAsync(UploadFileChunkInput input)
{
await FileUploader.UploadAsync(new UploadFileChunkInput
{
Path = input.Path,
Bucket = input.Bucket,
FileName = input.FileName,
TotalSize = input.TotalSize,
ChunkSize = input.ChunkSize,
ChunkNumber = input.ChunkNumber,
TotalChunks = input.TotalChunks,
CurrentChunkSize = input.CurrentChunkSize,
Content = input.File?.OpenReadStream(),
}, HttpContext.RequestAborted);
await FileUploader.UploadAsync(input);
}
[HttpDelete]

98
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PrivateFilesController.cs

@ -2,126 +2,78 @@
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Http;
using Volo.Abp.Content;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.OssManagement
{
[RemoteService(Name = OssManagementRemoteServiceConsts.RemoteServiceName)]
[Area("oss-management")]
[Route("api/files/private")]
[RemoteService(false)]
public class PrivateFilesController : AbpController
public class PrivateFilesController : AbpController, IPrivateFileAppService
{
private readonly IPrivateFileAppService _privateFileAppService;
private readonly IPrivateFileAppService _service;
public PrivateFilesController(
IPrivateFileAppService privateFileAppService)
IPrivateFileAppService service)
{
_privateFileAppService = privateFileAppService;
_service = service;
LocalizationResource = typeof(AbpOssManagementResource);
}
[HttpPost]
[Route("upload")]
public virtual async Task UploadAsync([FromForm] UploadOssObjectInput input)
{
await _privateFileAppService.UploadAsync(new UploadFileChunkInput
public virtual async Task<OssObjectDto> UploadAsync([FromForm] UploadFileInput input)
{
Path = input.Path,
FileName = input.FileName,
TotalSize = input.TotalSize,
ChunkSize = input.ChunkSize,
ChunkNumber = input.ChunkNumber,
TotalChunks = input.TotalChunks,
CurrentChunkSize = input.CurrentChunkSize,
Content = input.File?.OpenReadStream(),
});
return await _service.UploadAsync(input);
}
[HttpPost]
[Route("{path}")]
[Route("{path}/{name}")]
public virtual async Task<OssObjectDto> UploadAsync(string path, string name)
{
if (Request.ContentLength <= 0)
{
ThrowValidationException(L["FileNotBeNullOrEmpty"], "File");
}
var file = Request.Form.Files[0];
var fileName = name ?? file.FileName;
var createOssObjectInput = new UploadFileInput
[Route("upload")]
public virtual async Task UploadAsync(UploadFileChunkInput input)
{
Path = path,
Object = fileName,
Content = file.OpenReadStream(),
Overwrite = true
};
return await _privateFileAppService.UploadAsync(createOssObjectInput);
await _service.UploadAsync(input);
}
[HttpGet]
[Route("search")]
public virtual async Task<ListResultDto<OssObjectDto>> GetListAsync(GetFilesInput input)
{
return await _privateFileAppService.GetListAsync(input);
return await _service.GetListAsync(input);
}
[HttpGet]
[Route("{name}")]
[Route("{name}/{process}")]
[Route("p/{path}/{name}")]
[Route("p/{path}/{name}/{process}")]
public virtual async Task<IActionResult> GetAsync(string path, string name, string process)
[Route("{Name}")]
[Route("{Name}/{Process}")]
[Route("p/{Path}/{Name}")]
[Route("p/{Path}/{Name}/{Process}")]
public virtual async Task<IRemoteStreamContent> GetAsync([FromRoute] GetPublicFileInput input)
{
var input = new GetPublicFileInput
{
Name = name,
Path = path,
Process = process
};
var fileStream = await _privateFileAppService.GetAsync(input);
if (fileStream.IsNullOrEmpty())
{
return NotFound();
return await _service.GetAsync(input);
}
return File(
fileStream,
MimeTypes.GetByExtension(Path.GetExtension(input.Name))
);
[HttpDelete]
public virtual async Task DeleteAsync(GetPublicFileInput input)
{
await _service.DeleteAsync(input);
}
[HttpGet]
[Route("share")]
public virtual async Task<ListResultDto<MyFileShareDto>> GetShareListAsync()
{
return await _privateFileAppService.GetShareListAsync();
return await _service.GetShareListAsync();
}
[HttpPost]
[Route("share")]
public virtual async Task<FileShareDto> ShareAsync([FromBody] FileShareInput input)
{
return await _privateFileAppService.ShareAsync(input);
}
private static void ThrowValidationException(string message, string memberName)
{
throw new AbpValidationException(message,
new List<ValidationResult>
public virtual async Task<FileShareDto> ShareAsync(FileShareInput input)
{
new ValidationResult(message, new[] {memberName})
});
return await _service.ShareAsync(input);
}
}
}

78
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PublicFilesController.cs

@ -1,21 +1,17 @@
using LINGYUN.Abp.OssManagement.Localization;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Http;
using Volo.Abp.Validation;
using Volo.Abp.Content;
namespace LINGYUN.Abp.OssManagement
{
[RemoteService(Name = OssManagementRemoteServiceConsts.RemoteServiceName)]
[Area("oss-management")]
[Route("api/files/public")]
[RemoteService(false)]
public class PublicFilesController : AbpController
public class PublicFilesController : AbpController, IPublicFileAppService
{
private readonly IPublicFileAppService _publicFileAppService;
@ -29,44 +25,16 @@ namespace LINGYUN.Abp.OssManagement
[HttpPost]
[Route("upload")]
public virtual async Task UploadAsync([FromForm] UploadOssObjectInput input)
{
await _publicFileAppService.UploadAsync(new UploadFileChunkInput
public virtual async Task<OssObjectDto> UploadAsync([FromForm] UploadFileInput input)
{
Path = input.Path,
FileName = input.FileName,
TotalSize = input.TotalSize,
ChunkSize = input.ChunkSize,
ChunkNumber = input.ChunkNumber,
TotalChunks = input.TotalChunks,
CurrentChunkSize = input.CurrentChunkSize,
Content = input.File?.OpenReadStream(),
});
return await _publicFileAppService.UploadAsync(input);
}
[HttpPost]
[Route("{path}")]
[Route("{path}/{name}")]
public virtual async Task<OssObjectDto> UploadAsync(string path, string name)
{
if (Request.ContentLength <= 0)
{
ThrowValidationException(L["FileNotBeNullOrEmpty"], "File");
}
var file = Request.Form.Files[0];
var fileName = name ?? file.FileName;
var createOssObjectInput = new UploadFileInput
[Route("upload")]
public virtual async Task UploadAsync(UploadFileChunkInput input)
{
Path = path,
Object = fileName,
Content = file.OpenReadStream(),
Overwrite = true
};
return await _publicFileAppService.UploadAsync(createOssObjectInput);
await _publicFileAppService.UploadAsync(input);
}
[HttpGet]
@ -76,39 +44,21 @@ namespace LINGYUN.Abp.OssManagement
return await _publicFileAppService.GetListAsync(input);
}
[HttpGet]
[Route("{name}")]
[Route("{name}/{process}")]
[Route("p/{path}/{name}")]
[Route("p/{path}/{name}/{process}")]
public virtual async Task<IActionResult> GetAsync(string path, string name, string process)
{
var input = new GetPublicFileInput
{
Name = name,
Path = path,
Process = process
};
var fileStream = await _publicFileAppService.GetAsync(input);
if (fileStream.IsNullOrEmpty())
public virtual async Task<IRemoteStreamContent> GetAsync(GetPublicFileInput input)
{
return NotFound();
}
return File(
fileStream,
MimeTypes.GetByExtension(Path.GetExtension(input.Name))
);
return await _publicFileAppService.GetAsync(input);
}
private static void ThrowValidationException(string message, string memberName)
{
throw new AbpValidationException(message,
new List<ValidationResult>
[HttpDelete]
public virtual async Task DeleteAsync(GetPublicFileInput input)
{
new ValidationResult(message, new[] {memberName})
});
await _publicFileAppService.DeleteAsync(input);
}
}
}

71
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/StaticFilesController.cs

@ -2,23 +2,17 @@
using LINGYUN.Abp.OssManagement.Permissions;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Threading.Tasks;
using System.Web;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Http;
using Volo.Abp.Validation;
using Volo.Abp.Content;
namespace LINGYUN.Abp.OssManagement
{
[RemoteService(Name = OssManagementRemoteServiceConsts.RemoteServiceName)]
[Area("oss-management")]
[Route("api/files/static")]
[RemoteService(false)]
[ApiExplorerSettings(IgnoreApi = true)]
public class StaticFilesController : AbpController
public class StaticFilesController : AbpController, IStaticFilesAppService
{
private readonly IOssObjectAppService _ossObjectAppService;
private readonly IStaticFilesAppService _staticFilesAppServic;
@ -34,63 +28,20 @@ namespace LINGYUN.Abp.OssManagement
}
[HttpPost]
[Route("{bucket}")]
[Route("{bucket}/p/{path}")]
[Route("{bucket}/p/{path}/{name}")]
[Authorize(AbpOssManagementPermissions.OssObject.Create)]
public virtual async Task<OssObjectDto> UploadAsync(string bucket, string path, string name)
public virtual async Task<OssObjectDto> UploadAsync([FromForm] CreateOssObjectInput input)
{
if (Request.ContentLength <= 0)
{
ThrowValidationException(L["FileNotBeNullOrEmpty"], "File");
}
var createOssObjectInput = new CreateOssObjectInput
{
Bucket = HttpUtility.UrlDecode(bucket),
Path = HttpUtility.UrlDecode(path),
Object = name ?? Request.Form.Files[0].FileName,
Content = Request.Form.Files[0].OpenReadStream(),
Overwrite = true
};
return await _ossObjectAppService.CreateAsync(createOssObjectInput);
return await _ossObjectAppService.CreateAsync(input);
}
[HttpGet]
[Route("{bucket}/{name}")]
[Route("{bucket}/{name}/{process}")]
[Route("{bucket}/p/{path}/{name}")]
[Route("{bucket}/p/{path}/{name}/{process}")]
public virtual async Task<IActionResult> GetAsync(string bucket, string path, string name, string process)
{
var input = new GetStaticFileInput
{
Bucket = bucket,
Name = name,
Path = path,
Process = process
};
var fileStream = await _staticFilesAppServic.GetAsync(input);
if (fileStream.IsNullOrEmpty())
{
return NotFound();
}
return File(
fileStream,
MimeTypes.GetByExtension(Path.GetExtension(input.Name))
);
}
private static void ThrowValidationException(string message, string memberName)
{
throw new AbpValidationException(message,
new List<ValidationResult>
[Route("{Bucket}/{Name}")]
[Route("{Bucket}/{Name}/{Process}")]
[Route("{Bucket}/p/{Path}/{Name}")]
[Route("{Bucket}/p/{Path}/{Name}/{Process}")]
public virtual async Task<IRemoteStreamContent> GetAsync([FromRoute] GetStaticFileInput input)
{
new ValidationResult(message, new[] {memberName})
});
return await _staticFilesAppServic.GetAsync(input);
}
}
}

37
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/UploadOssObjectInput.cs

@ -1,37 +0,0 @@
using Microsoft.AspNetCore.Http;
using System.ComponentModel.DataAnnotations;
namespace LINGYUN.Abp.OssManagement
{
public class UploadOssObjectInput : UploadFile
{
public string Bucket { get; set; }
public string Path { get; set; }
#region 配合Uplaoder 分块传输
/// <summary>
/// 常规块大小
/// </summary>
[Required]
public long ChunkSize { get; set; }
/// <summary>
/// 当前块大小
/// </summary>
[Required]
public long CurrentChunkSize { get; set; }
/// <summary>
/// 当前上传中块的索引
/// </summary>
[Required]
public int ChunkNumber { get; set; }
/// <summary>
/// 块总数
/// </summary>
[Required]
public int TotalChunks { get; set; }
#endregion
public IFormFile File { get; set; }
}
}
Loading…
Cancel
Save