How do you do File Upload method in AppServices for aspnetboilerplate?

后端 未结 6 742
梦谈多话
梦谈多话 2021-01-14 11:17

I really like aspnetboilerplate framework, I learning/using it now..

How do you do \'File Upload\' logic/method in AppServices for aspnetboilerplate? The angular par

6条回答
  •  Happy的楠姐
    2021-01-14 11:52

    We implement file upload method : - use sql server fileTable technology - implement application method's service to accept data similar to this Dto

     public FileDto File { get; set; }
    

    ...

    public class FileDto
    {
        public FileDto()
        {
    
        }
        public FileDto(string file, string fileType)
        {
            File = file;
            FileType = fileType;
        }
        [DisableAuditing]
        public string File { get; set; }
        public string FileName { get; set; }
        public Guid? StreamId { get; set; }
        public string FileType { get; set; } = "";
        [DisableAuditing]
        public string FileWithHeader
        {
            get
            {
                if (FileType == null|| FileType=="")
                    return "";
                if (FileType.ToLower() == "jpg" || FileType.ToLower() == "jpeg")
                    return "data:image/Jpeg;base64," + File;
                if (FileType.ToLower() == "png")
                    return "data:image/png;base64," + File;
                if (FileType.ToLower() == "gif")
                    return "data:image/gif;base64," + File;
                if (FileType.ToLower() == "ppt")
                    return "data:application/vnd.ms-powerpoint;base64," + File;
                if (FileType.ToLower() == "xls")
                    return "data:application/vnd.ms-excel;base64," + File;
                if (FileType.ToLower() == "doc")
                    return "data:application/msword;base64," + File;
                if (FileType.ToLower() == "zip")
                    return "data:application/zip;base64," + File;
                if (FileType.ToLower() == "exe")
                    return "data:application/octet-stream;base64," + File;
                if (FileType.ToLower() == "txt")
                    return "data:text/plain;base64," + File;
                if (FileType.ToLower() == "pdf")
                    return "data:application/pdf;base64," + File;
                if (FileType.ToLower() == "bmp")
                    return "data:image/bmp;base64," + File;
                if (FileType.ToLower() == "csv")
                    return "data:text/csv;base64," + File;
                if (FileType.ToLower() == "pptx")
                    return "data:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64," + File;
                if (FileType.ToLower() == "xlsx")
                    return "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64," + File;
                if (FileType.ToLower() == "docx")
                    return "data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64," + File;
                if (FileType.ToLower() == "rar")
                    return "data:application/x-rar-compressed;base64," + File;
                if (FileType.ToLower() == "rtf")
                    return "data:application/rtf;base64," + File;
                return "";
            }
        }
    }
    

    and method implementation

     public UploadFileOutput UploadFile(UploadFileInput input)
        {
            if (input.Id <= 0 || input.File == null)
            {
                throw new UserFriendlyException(L("GetDataError"));
            }
    
            return new UploadFileOutput()
            {
    
                StreamId = _attachmentRepo.InsertAttachment(input.File.FileName, Convert.FromBase64String(input.File.File), LIMSConsts.HeightThumbnail, true, ServerConfig.ThumbnailImagePath),
            };
    
        }
    

    insertAttachment method:

    public Guid InsertAttachment(string fileName, byte[] fileStream, int heightThumbnail = 50, bool saveThumbnail = false,string thumbLocationPath=null)
        {
    
            Guid AttachmentId = Guid.Empty;
    
            SqlParameter _attachmentId = new SqlParameter();
            _attachmentId.ParameterName = "@attachmentId";
            _attachmentId.Direction = System.Data.ParameterDirection.InputOutput;
            _attachmentId.Value = AttachmentId;
    
            SqlParameter _fileStream = new SqlParameter();
            _fileStream.SqlDbType = System.Data.SqlDbType.VarBinary;
            _fileStream.Value = fileStream;
            _fileStream.ParameterName = "@fileStream";
    
            Context.Database.ExecuteSqlCommand("EXECUTE dbo.sp_AttachmentFile_Insert @AttachmentId OUTPUT,@fileName,@fileStream",
                _attachmentId,
                new SqlParameter("@fileName", fileName),
                _fileStream);
    
            if (saveThumbnail == true) {
                var ms = new MemoryStream(fileStream);
                var image = Image.FromStream(ms);
    
                var width = (int)(heightThumbnail * image.Width / image.Height);
                var height = (int)(heightThumbnail);
    
                var Thumbnail = new Bitmap(width, height);
                Graphics.FromImage(Thumbnail).DrawImage(image, 0, 0, width, height);                
                Bitmap Thumb= new Bitmap(Thumbnail);
                Thumb.Save(Path.Combine(thumbLocationPath, _attachmentId.Value+".jpg"), ImageFormat.Jpeg);
    
            }
    
            return (Guid)_attachmentId.Value;
        }
    

    and Stored procedure implementation

    ALTER PROC [dbo].[sp_AttachmentFile_Insert]
    @AttachmentId uniqueidentifier out,
    @fileName nvarchar(256),
    @fileStream VARBINARY(max)
    

    AS SET @AttachmentId=NEWID()

    WHILE(EXISTS(SELECT 1 FROM dbo.Attachment WHERE name=@fileName))
    BEGIN
        DECLARE @fileExtention NVARCHAR(100)
        SELECT @fileExtention ='.'+dbo.GetFileExtension(@fileName)
        SET @fileName=REPLACE(@fileName,@fileExtention,'')+
            CAST(DATEPART( DAY, GETDATE()) AS VARCHAR(10))+'_'
            +CAST(DATEPART( HOUR, GETDATE()) AS VARCHAR(10))+'_'+
            +CAST(DATEPART( MINUTE, GETDATE()) AS VARCHAR(10))+'_'+
            +CAST(DATEPART( SECOND, GETDATE()) AS VARCHAR(10))+@fileExtention
    END
    
    INSERT into dbo.Attachment(stream_id,name,file_stream)
        VALUES(@AttachmentId,@fileName,@fileStream)
    

    and finally Thank to "Halil İbrahim Kalkan" for thihs awesome framework.

提交回复
热议问题