文件上传功能添加,注意使用Path.Combine处理通用路径问题(windows||docker)

This commit is contained in:
owenchen committed 2026-09-03 16:09:54 +08:00
1 parent 7817c5374c
commit 244b59a3fb
135 files changed
+16937 -75

No files matched your search

@@ -32,6 +32,8 @@
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.0" />
<PackageReference Include="System.Drawing.Common" Version="8.0.2" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.3" />
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.1" />
</ItemGroup>
@@ -0,0 +1,657 @@
using CloudBuilder.Core.DatabaseAccessor;
using CloudBuilder.Core.Policy;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Transactions;
using CloudBuilder.Core.Service;
using CloudBuilder.Master.Service;
using CloudBuilder.Core.DatabaseAccessor.Entity;
using Microsoft.AspNetCore.Http;
using CloudBuilder.Master.Entity;
using System;
using CloudBuilder.Master.Data;
using CloudBuilder.Master.SearchCriteria;
namespace CloudBuilder.Web.Entry.Controllers.Master
{
[Authorize(AuthorizePolicy.PERMISSION)]
[ApiController]
[Route("[controller]/[action]")]
public class DmsFileController : ControllerBase
{
private readonly IApplicationService service;
private readonly IDmsFileService dmsFileService;
public DmsFileController(IApplicationService service, IDmsFileService dmsFileService)
{
this.service = service;
this.dmsFileService= dmsFileService;
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindByKey(Int64 key)
{
try
{
var result = dmsFileService.FindByKey(key);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindBySearchCriteria(DmsFileSearchCriteria criteria)
{
try
{
var result = dmsFileService.FindBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindDatasBySearchCriteria(DmsFileSearchCriteria criteria)
{
try
{
var result = dmsFileService.FindDatasBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindDeleteLogBySearchCriteria(DmsFileSearchCriteria criteria)
{
try
{
var result = dmsFileService.FindDeleteLogBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindFamilyBySearchCriteria(DmsFileSearchCriteria criteria)
{
try
{
var result = dmsFileService.FindFamilyBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindDmsFileDeleteLogByKey(Int64 key)
{
try
{
var result = dmsFileService.FindDmsFileDeleteLogByKey(key);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Print")]
[HttpPost]
public dynamic PrintBySearchCriteria(DmsFileSearchCriteria criteria)
{
try
{
var result = dmsFileService.PrintBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Insert")]
[HttpPost]
[UnitOfWork]
public dynamic Insert(DmsFileEntity data)
{
try
{
var result = dmsFileService.Insert(data);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Update")]
[HttpPost]
[UnitOfWork]
public dynamic Update(DmsFileEntity data)
{
try
{
var result = dmsFileService.Update(data);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Delete")]
[HttpPost]
[UnitOfWork]
public dynamic Delete(Int64 key){
try
{
dmsFileService.Delete(key);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Delete")]
[HttpPost]
[UnitOfWork]
public dynamic DeleteLog(Int64 key){
try
{
dmsFileService.DeleteLog(key);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Insert")]
[HttpPost]
[UnitOfWork]
public dynamic CreateDmsFolder(DmsFileEntity dmsFile)
{
try
{
var result = dmsFileService.CreateDmsFolder(dmsFile);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Insert")]
[HttpPost]
[UnitOfWork]
public dynamic CreateFamilyDmsFolder(FamilyDmsFileViewEntity familyDmsFile){
try
{
dmsFileService.CreateFamilyDmsFolder(familyDmsFile);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Update")]
[HttpPost]
[UnitOfWork]
public dynamic UpdateDmsFolder(DmsFileEntity dmsFile){
try
{
dmsFileService.UpdateDmsFolder(dmsFile);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindDmsFolders()
{
try
{
var result = dmsFileService.FindDmsFolders();
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindDmsFolderDeleteLogs()
{
try
{
var result = dmsFileService.FindDmsFolderDeleteLogs();
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindDmsFolderData()
{
try
{
var result = dmsFileService.FindDmsFolderData();
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Update")]
[HttpPost]
[UnitOfWork]
public dynamic MoveDmsFolder(DmsFileEntity dmsFile){
try
{
dmsFileService.MoveDmsFolder(dmsFile);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Insert")]
[HttpPost]
[UnitOfWork]
public dynamic UploadFile()
{
try
{
dmsFileService.UploadFile();
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindM3u8Path(Int64 fileId)
{
try
{
var result = dmsFileService.FindM3u8Path(fileId);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindSourceVideoPath(Int64 fileId)
{
try
{
var result = dmsFileService.FindSourceVideoPath(fileId);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindDeleteLogM3u8Path(Int64 fileId)
{
try
{
var result = dmsFileService.FindDeleteLogM3u8Path(fileId);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic DownloadFile(Int64 fileId)
{
try
{
var result = dmsFileService.DownloadFile(fileId);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic DownloadFilePreview(DmsFileEntity dmsFile)
{
try
{
var result = dmsFileService.DownloadFilePreview(dmsFile);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic DownloadFileCombine(string fileName)
{
try
{
var result = dmsFileService.DownloadFileCombine(fileName);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindFamilyDmsFolders()
{
try
{
var result = dmsFileService.FindFamilyDmsFolders();
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindFamilyDmsFoldersByFamilyName(string familyName)
{
try
{
var result = dmsFileService.FindFamilyDmsFoldersByFamilyName(familyName);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindDmsFolderMapByFolderName(string folderName)
{
try
{
var result = dmsFileService.FindDmsFolderMapByFolderName(folderName);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Find")]
[HttpPost]
public dynamic FindFolderNameParentByFolderName(string folderName)
{
try
{
var result = dmsFileService.FindFolderNameParentByFolderName(folderName);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Insert")]
[HttpPost]
public dynamic CreateFamilyGroupFolder(FamilyGroupFolderEntity[] familyGroupFolder){
try
{
dmsFileService.CreateFamilyGroupFolder(familyGroupFolder);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "DmsFile", operate: "Delete")]
[HttpPost]
public dynamic DeleteFamilyGroupFolder(FamilyGroupFolderEntity[] familyGroupFolder){
try
{
dmsFileService.DeleteFamilyGroupFolder(familyGroupFolder);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
}
}
@@ -0,0 +1,333 @@
using CloudBuilder.Core.DatabaseAccessor;
using CloudBuilder.Core.Policy;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Transactions;
using CloudBuilder.Core.Service;
using CloudBuilder.Master.Service;
using CloudBuilder.Core.DatabaseAccessor.Entity;
using Microsoft.AspNetCore.Http;
using CloudBuilder.Master.Entity;
using System;
using CloudBuilder.Master.Data;
using CloudBuilder.Master.SearchCriteria;
namespace CloudBuilder.Web.Entry.Controllers.Master
{
[Authorize(AuthorizePolicy.PERMISSION)]
[ApiController]
[Route("[controller]/[action]")]
public class FamilyGroupController : ControllerBase
{
private readonly IApplicationService service;
private readonly IFamilyGroupService familyGroupService;
public FamilyGroupController(IApplicationService service, IFamilyGroupService familyGroupService)
{
this.service = service;
this.familyGroupService= familyGroupService;
}
[PermissionOperate(name: "FamilyGroup", operate: "Find")]
[HttpPost]
public dynamic FindByKey(string key)
{
try
{
var result = familyGroupService.FindByKey(key);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Find")]
[HttpPost]
public dynamic FindBySearchCriteria(FamilyGroupSearchCriteria criteria)
{
try
{
var result = familyGroupService.FindBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Find")]
[HttpPost]
public dynamic FindFamilyUserBySearchCriteria(FamilyGroupManagerUserSearchCriteria criteria)
{
try
{
var result = familyGroupService.FindFamilyUserBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Find")]
[HttpPost]
public dynamic FamilyFolderFavoriteBySearchCriteria(FamilyGroupManagerUserSearchCriteria criteria)
{
try
{
var result = familyGroupService.FamilyFolderFavoriteBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Print")]
[HttpPost]
public dynamic PrintBySearchCriteria(FamilyGroupSearchCriteria criteria)
{
try
{
var result = familyGroupService.PrintBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Insert")]
[HttpPost]
[UnitOfWork]
public dynamic Insert(FamilyGroupData data)
{
try
{
var result = familyGroupService.Insert(data);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Update")]
[HttpPost]
[UnitOfWork]
public dynamic Update(FamilyGroupData data)
{
try
{
var result = familyGroupService.Update(data);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Delete")]
[HttpPost]
[UnitOfWork]
public dynamic Delete(string key){
try
{
familyGroupService.Delete(key);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Update")]
[HttpPost]
[UnitOfWork]
public dynamic InsertFamilyGroupManager(FamilyGroupManagerEntity manager){
try
{
familyGroupService.InsertFamilyGroupManager(manager);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Insert")]
[HttpPost]
[UnitOfWork]
public dynamic InsertFamilyGroupPermission(FamilyGroupPermissionEntity[] managers){
try
{
familyGroupService.InsertFamilyGroupPermission(managers);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Update")]
[HttpPost]
[UnitOfWork]
public dynamic UpdateFamilyGroupManager(FamilyGroupManagerEntity manager){
try
{
familyGroupService.UpdateFamilyGroupManager(manager);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Update")]
[HttpPost]
[UnitOfWork]
public dynamic DeleteFamilyGroupManager(FamilyGroupManagerEntity manager){
try
{
familyGroupService.DeleteFamilyGroupManager(manager);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Insert")]
[HttpPost]
public dynamic InsertFamilyFolderFavorite(string folderName){
try
{
familyGroupService.InsertFamilyFolderFavorite(folderName);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Update")]
[HttpPost]
public dynamic DeleteFamilyFolderFavorite(string folderName){
try
{
familyGroupService.DeleteFamilyFolderFavorite(folderName);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "FamilyGroup", operate: "Update")]
[HttpPost]
public dynamic DeleteFamilyFolderFavorites(FamilyFolderFavoriteEntity[] familyFolderFavorites){
try
{
familyGroupService.DeleteFamilyFolderFavorites(familyFolderFavorites);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
}
}
@@ -7,9 +7,10 @@ using System.Transactions;
using CloudBuilder.Core.Service;
using CloudBuilder.Master.Service;
using CloudBuilder.Core.DatabaseAccessor.Entity;
using Microsoft.AspNetCore.Http;
using CloudBuilder.Master.Entity;
using CloudBuilder.Master.Data;
using System;
using CloudBuilder.Master.Data;
using CloudBuilder.Master.SearchCriteria;
namespace CloudBuilder.Web.Entry.Controllers.Master
@@ -7,9 +7,10 @@ using System.Transactions;
using CloudBuilder.Core.Service;
using CloudBuilder.Master.Service;
using CloudBuilder.Core.DatabaseAccessor.Entity;
using Microsoft.AspNetCore.Http;
using CloudBuilder.Master.Entity;
using CloudBuilder.Master.Data;
using System;
using CloudBuilder.Master.Data;
using CloudBuilder.Master.SearchCriteria;
namespace CloudBuilder.Web.Entry.Controllers.Master
@@ -0,0 +1,54 @@
using CloudBuilder.Core.DatabaseAccessor;
using CloudBuilder.Core.Policy;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Transactions;
using CloudBuilder.Core.Service;
using CloudBuilder.Master.Service;
using CloudBuilder.Core.DatabaseAccessor.Entity;
using Microsoft.AspNetCore.Http;
using CloudBuilder.Master.Entity;
using System;
using CloudBuilder.Master.Data;
using CloudBuilder.Master.SearchCriteria;
namespace CloudBuilder.Web.Entry.Controllers.Master
{
[Authorize(AuthorizePolicy.PERMISSION)]
[ApiController]
[Route("[controller]/[action]")]
public class FileTypePolicyController : ControllerBase
{
private readonly IApplicationService service;
private readonly IFileTypePolicyService fileTypePolicyService;
public FileTypePolicyController(IApplicationService service, IFileTypePolicyService fileTypePolicyService)
{
this.service = service;
this.fileTypePolicyService= fileTypePolicyService;
}
[AllowAnonymous]
[HttpPost]
public dynamic FindSelectOption(bool blank)
{
try
{
var result = fileTypePolicyService.FindSelectOption(blank);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
}
}
@@ -0,0 +1,195 @@
using CloudBuilder.Core.DatabaseAccessor;
using CloudBuilder.Core.Policy;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Transactions;
using CloudBuilder.Core.Service;
using CloudBuilder.Master.Service;
using CloudBuilder.Core.DatabaseAccessor.Entity;
using Microsoft.AspNetCore.Http;
using CloudBuilder.Master.Entity;
using System;
using CloudBuilder.Master.Data;
using CloudBuilder.Master.SearchCriteria;
namespace CloudBuilder.Web.Entry.Controllers.Master
{
[Authorize(AuthorizePolicy.PERMISSION)]
[ApiController]
[Route("[controller]/[action]")]
public class PublishAudioController : ControllerBase
{
private readonly IApplicationService service;
private readonly IPublishAudioService publishAudioService;
public PublishAudioController(IApplicationService service, IPublishAudioService publishAudioService)
{
this.service = service;
this.publishAudioService= publishAudioService;
}
[PermissionOperate(name: "PublishAudio", operate: "Find")]
[HttpPost]
public dynamic FindByKey(string key)
{
try
{
var result = publishAudioService.FindByKey(key);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishAudio", operate: "Find")]
[HttpPost]
public dynamic FindBySearchCriteria(PublishAudioSearchCriteria criteria)
{
try
{
var result = publishAudioService.FindBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishAudio", operate: "Find")]
[HttpPost]
public dynamic FindPublishAudioDefault()
{
try
{
var result = publishAudioService.FindPublishAudioDefault();
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishAudio", operate: "Print")]
[HttpPost]
public dynamic PrintBySearchCriteria(PublishAudioSearchCriteria criteria)
{
try
{
var result = publishAudioService.PrintBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishAudio", operate: "Insert")]
[HttpPost]
[UnitOfWork]
public dynamic Insert(PublishAudioData data)
{
try
{
var result = publishAudioService.Insert(data);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishAudio", operate: "Update")]
[HttpPost]
[UnitOfWork]
public dynamic Update(PublishAudioData data)
{
try
{
var result = publishAudioService.Update(data);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishAudio", operate: "Delete")]
[HttpPost]
[UnitOfWork]
public dynamic Delete(string key){
try
{
publishAudioService.Delete(key);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishAudio", operate: "Insert")]
[HttpPost]
public dynamic InsertPublishAudioDetail(PublishData publishData){
try
{
publishAudioService.InsertPublishAudioDetail(publishData);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
}
}
@@ -0,0 +1,234 @@
using CloudBuilder.Core.DatabaseAccessor;
using CloudBuilder.Core.Policy;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Transactions;
using CloudBuilder.Core.Service;
using CloudBuilder.Master.Service;
using CloudBuilder.Core.DatabaseAccessor.Entity;
using Microsoft.AspNetCore.Http;
using CloudBuilder.Master.Entity;
using System;
using CloudBuilder.Master.Data;
using CloudBuilder.Master.SearchCriteria;
namespace CloudBuilder.Web.Entry.Controllers.Master
{
[Authorize(AuthorizePolicy.PERMISSION)]
[ApiController]
[Route("[controller]/[action]")]
public class PublishPhotoController : ControllerBase
{
private readonly IApplicationService service;
private readonly IPublishPhotoService publishPhotoService;
public PublishPhotoController(IApplicationService service, IPublishPhotoService publishPhotoService)
{
this.service = service;
this.publishPhotoService= publishPhotoService;
}
[PermissionOperate(name: "PublishPhoto", operate: "Find")]
[HttpPost]
public dynamic FindByKey(string key)
{
try
{
var result = publishPhotoService.FindByKey(key);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishPhoto", operate: "Find")]
[HttpPost]
public dynamic FindBySearchCriteria(PublishPhotoSearchCriteria criteria)
{
try
{
var result = publishPhotoService.FindBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishPhoto", operate: "Print")]
[HttpPost]
public dynamic PrintBySearchCriteria(PublishPhotoSearchCriteria criteria)
{
try
{
var result = publishPhotoService.PrintBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishPhoto", operate: "Insert")]
[HttpPost]
[UnitOfWork]
public dynamic Insert(PublishPhotoData data)
{
try
{
var result = publishPhotoService.Insert(data);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishPhoto", operate: "Update")]
[HttpPost]
[UnitOfWork]
public dynamic Update(PublishPhotoData data)
{
try
{
var result = publishPhotoService.Update(data);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishPhoto", operate: "Delete")]
[HttpPost]
[UnitOfWork]
public dynamic Delete(string key){
try
{
publishPhotoService.Delete(key);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[AllowAnonymous]
[HttpPost]
public dynamic FindPublishPhotoDetailByPublishName(string publishName)
{
try
{
var result = publishPhotoService.FindPublishPhotoDetailByPublishName(publishName);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[AllowAnonymous]
[HttpPost]
public dynamic FindPublishPhotoDetail()
{
try
{
var result = publishPhotoService.FindPublishPhotoDetail();
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishAudio", operate: "Insert")]
[HttpPost]
public dynamic InsertPublishPhotoDetail(PublishData publishData){
try
{
publishPhotoService.InsertPublishPhotoDetail(publishData);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishAudio", operate: "Insert")]
[HttpPost]
public dynamic InsertPublishPhotoDetailByFamilyGroup(PublishData publishData){
try
{
publishPhotoService.InsertPublishPhotoDetailByFamilyGroup(publishData);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
}
}
@@ -0,0 +1,195 @@
using CloudBuilder.Core.DatabaseAccessor;
using CloudBuilder.Core.Policy;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Transactions;
using CloudBuilder.Core.Service;
using CloudBuilder.Master.Service;
using CloudBuilder.Core.DatabaseAccessor.Entity;
using Microsoft.AspNetCore.Http;
using CloudBuilder.Master.Entity;
using System;
using CloudBuilder.Master.Data;
using CloudBuilder.Master.SearchCriteria;
namespace CloudBuilder.Web.Entry.Controllers.Master
{
[Authorize(AuthorizePolicy.PERMISSION)]
[ApiController]
[Route("[controller]/[action]")]
public class PublishVideoController : ControllerBase
{
private readonly IApplicationService service;
private readonly IPublishVideoService publishVideoService;
public PublishVideoController(IApplicationService service, IPublishVideoService publishVideoService)
{
this.service = service;
this.publishVideoService= publishVideoService;
}
[PermissionOperate(name: "PublishVideo", operate: "Find")]
[HttpPost]
public dynamic FindByKey(string key)
{
try
{
var result = publishVideoService.FindByKey(key);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishVideo", operate: "Find")]
[HttpPost]
public dynamic FindBySearchCriteria(PublishVideoSearchCriteria criteria)
{
try
{
var result = publishVideoService.FindBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishVideo", operate: "Find")]
[HttpPost]
public dynamic FindPublishVideoDefault()
{
try
{
var result = publishVideoService.FindPublishVideoDefault();
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishVideo", operate: "Print")]
[HttpPost]
public dynamic PrintBySearchCriteria(PublishVideoSearchCriteria criteria)
{
try
{
var result = publishVideoService.PrintBySearchCriteria(criteria);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishVideo", operate: "Insert")]
[HttpPost]
[UnitOfWork]
public dynamic Insert(PublishVideoData data)
{
try
{
var result = publishVideoService.Insert(data);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishVideo", operate: "Update")]
[HttpPost]
[UnitOfWork]
public dynamic Update(PublishVideoData data)
{
try
{
var result = publishVideoService.Update(data);
return result;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishVideo", operate: "Delete")]
[HttpPost]
[UnitOfWork]
public dynamic Delete(string key){
try
{
publishVideoService.Delete(key);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
[PermissionOperate(name: "PublishVideo", operate: "Insert")]
[HttpPost]
public dynamic InsertPublishVideoDetail(PublishData publishData){
try
{
publishVideoService.InsertPublishVideoDetail(publishData);
return string.Empty;
}
catch (ValidatedException vex)
{
return vex;
}
catch (Exception ex)
{
return new ServiceErrorException(ex);
}
}
}
}
@@ -24,6 +24,7 @@ RUN dotnet publish "./CloudBuilder.Web.Entry.csproj" -c $BUILD_CONFIGURATION -o
# 此階段用於生產環境,或以一般模式從 VS 執行時 (未使用偵錯設定時的預設值)
FROM base AS final
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/*
COPY --from=publish /app/publish .
COPY ./dist ./dist
ENTRYPOINT ["dotnet", "CloudBuilder.Web.Entry.dll"]
@@ -2,6 +2,7 @@
using CloudBuilder.Core.Extensions;
using CloudBuilder.Core.Service;
using CloudBuilder.Security.Data;
using CloudBuilder.Security.Policy;
using CloudBuilder.Security.Service;
using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing;
using Microsoft.AspNetCore.Http.Features;
@@ -98,13 +99,13 @@ provider.Mappings[".flac"] = "audio/x-flac";
provider.Mappings[".m3u8"] = "application/vnd.apple.mpegurl";
provider.Mappings[".lrc"] = "application/octet-stream";
//虚拟文件,App.Configuration[VirtualPathPolicy.VirtualPath_RealPath]这个路径一定要存在,不然直接出错
string physicalDir = app.Configuration["FileServiceSettings:PhysicalFileDirectory"];
string physicalDir = app.Configuration[ServiceSettingsPolicy.PhysicalFileDirectory];
if (!string.IsNullOrEmpty(physicalDir))
{
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(physicalDir),
RequestPath = app.Configuration["FileServiceSettings:RequestPath"],
RequestPath = app.Configuration[ServiceSettingsPolicy.RequestPath],
ContentTypeProvider = provider
});
}
@@ -3,7 +3,7 @@
<Project>
<PropertyGroup>
<_PublishTargetUrl>C:\inetpub\wwwroot\dockwebapi2</_PublishTargetUrl>
<History>True|2026-09-02T03:08:23.8720038Z||;True|2026-09-02T10:58:16.8081797+08:00||;True|2026-08-26T13:34:12.3805892+08:00||;True|2026-08-25T08:31:30.7787234+08:00||;True|2026-08-20T13:10:46.4725468+08:00||;True|2026-08-20T13:10:28.3142576+08:00||;True|2026-08-19T16:10:27.3362887+08:00||;True|2026-08-19T16:01:12.6234971+08:00||;True|2026-08-19T15:42:46.6576265+08:00||;True|2026-08-19T13:39:59.9363522+08:00||;True|2026-08-19T13:36:53.0379313+08:00||;True|2026-08-19T13:31:36.0841398+08:00||;True|2026-08-19T11:44:37.5319626+08:00||;True|2026-08-19T09:36:45.6000047+08:00||;True|2026-08-19T09:34:36.8468631+08:00||;True|2026-08-19T08:35:41.2202300+08:00||;True|2026-08-18T16:20:59.0170916+08:00||;</History>
<History>True|2026-09-03T08:05:52.5270232Z||;True|2026-09-03T14:52:56.8559144+08:00||;True|2026-09-02T11:08:23.8720038+08:00||;True|2026-09-02T10:58:16.8081797+08:00||;True|2026-08-26T13:34:12.3805892+08:00||;True|2026-08-25T08:31:30.7787234+08:00||;True|2026-08-20T13:10:46.4725468+08:00||;True|2026-08-20T13:10:28.3142576+08:00||;True|2026-08-19T16:10:27.3362887+08:00||;True|2026-08-19T16:01:12.6234971+08:00||;True|2026-08-19T15:42:46.6576265+08:00||;True|2026-08-19T13:39:59.9363522+08:00||;True|2026-08-19T13:36:53.0379313+08:00||;True|2026-08-19T13:31:36.0841398+08:00||;True|2026-08-19T11:44:37.5319626+08:00||;True|2026-08-19T09:36:45.6000047+08:00||;True|2026-08-19T09:34:36.8468631+08:00||;True|2026-08-19T08:35:41.2202300+08:00||;True|2026-08-18T16:20:59.0170916+08:00||;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>
@@ -4,7 +4,7 @@
"MaxFileSizeMB": 20
},
"UrlOrigins": "http://192.168.195.68,http://localhost,http://localhost:8088,http://localhost:5235", //这个参数是反向指向的地址,也是跨域访问的地址,包含Vue内WebSitePolicy设置WebSite
"applicationUrl": "https://uat.youjiala.com", //這個地址是最外层用户访问的,不是反向指向的地址https://uat.youjiala.com
"ApplicationUrl": "http://localhost:5235", //這個地址是最外层用户访问的,不是反向指向的地址https://uat.youjiala.com
"CloudBuilder": {
"Culture": "zh-cn",
"DbContexts": {
@@ -55,11 +55,11 @@
}
},
"FileServiceSettings": {
"PhysicalFileDirectory": "", //D:\\Net8\\FileServer
"PhysicalFileDirectory": "D:\\Net8\\FileServer",
"RequestPath": "/FileServer", //如果是IIS反向代理来的,那么要在本地给这个文件添加IUSR,IIS_IUSRS权限
"UploadDmsFileDirectory": "D:\\Net8\\FileServer\\Upload\\DmsFile", //上传文件目录,有可能是分片文件,仅当临时文件使用
"BackupDmsFileDirectory": "D:\\Net8\\FileServer\\Backup\\DmsFile", //这个是备份目录,也是完整文件目录,原文件目录
"ScaleDmsFileDirectory": "D:\\Net8\\FileServer\\Scale\\DmsFile", //这个是压缩图片或者视频目录
"DmsFileUploadDirectory": "D:\\Net8\\FileServer\\Upload\\DmsFile", //上传文件目录,有可能是分片文件,仅当临时文件使用
"DmsFileBackupDirectory": "D:\\Net8\\FileServer\\Backup\\DmsFile", //这个是备份目录,也是完整文件目录,原文件目录
"DmsFileScaleDirectory": "D:\\Net8\\FileServer\\Scale\\DmsFile", //这个是压缩图片或者视频目录
"ExcelOutputDirectory": "D:\\Net8\\FileServer\\Output"
},
"Ffmpeg": {