コード例 #1
0
        public static ChunkedUploadSession UploadChunk(string uploadId, Stream stream, long chunkLength)
        {
            var uploadSession = ChunkedUploadSessionHolder.GetSession(uploadId);

            uploadSession.Expired = DateTime.UtcNow + ChunkedUploadSessionHolder.SlidingExpiration;

            if (chunkLength <= 0)
            {
                throw new Exception(FilesCommonResource.ErrorMassage_EmptyFile);
            }

            if (chunkLength > SetupInfo.MaxUploadSize)
            {
                throw FileSizeComment.GetFileSizeException(SetupInfo.MaxUploadSize);
            }

            if (uploadSession.BytesUploaded + chunkLength > GetMaxFileSize(uploadSession))
            {
                AbortUpload(uploadSession);
                throw FileSizeComment.GetFileSizeException(GetMaxFileSize(uploadSession));
            }

            using (var dao = Global.DaoFactory.GetFileDao())
            {
                dao.UploadChunk(uploadSession, stream, chunkLength);
            }

            if (uploadSession.BytesUploaded == uploadSession.BytesTotal)
            {
                FileMarker.MarkAsNew(uploadSession.File);
                ChunkedUploadSessionHolder.RemoveSession(uploadSession);
            }

            return(uploadSession);
        }
コード例 #2
0
        public static ChunkedUploadSession InitiateUpload(string folderId, string fileId, string fileName, long contentLength)
        {
            if (string.IsNullOrEmpty(folderId))
            {
                folderId = null;
            }

            if (string.IsNullOrEmpty(fileId))
            {
                fileId = null;
            }

            var file = new File {
                ID = fileId, FolderID = folderId, Title = fileName, ContentLength = contentLength
            };

            using (var dao = Global.DaoFactory.GetFileDao())
            {
                var uploadSession = dao.CreateUploadSession(file, contentLength);

                uploadSession.Expired  = uploadSession.Created + ChunkedUploadSessionHolder.SlidingExpiration;
                uploadSession.Location = FilesLinkUtility.GetUploadChunkLocationUrl(uploadSession.Id, contentLength > 0);
                uploadSession.TenantId = CoreContext.TenantManager.GetCurrentTenant().TenantId;
                uploadSession.UserId   = SecurityContext.CurrentAccount.ID;
                uploadSession.FolderId = folderId;

                ChunkedUploadSessionHolder.StoreSession(uploadSession);

                return(uploadSession);
            }
        }
コード例 #3
0
        private static void AbortUpload(ChunkedUploadSession uploadSession)
        {
            using (var dao = Global.DaoFactory.GetFileDao())
            {
                dao.AbortUploadSession(uploadSession);
            }

            ChunkedUploadSessionHolder.RemoveSession(uploadSession);
        }
コード例 #4
0
ファイル: FileUploader.cs プロジェクト: ONLYOFFICE/AppServer
        public ChunkedUploadSession <T> UploadChunk <T>(string uploadId, Stream stream, long chunkLength)
        {
            var uploadSession = ChunkedUploadSessionHolder.GetSession <T>(uploadId);

            uploadSession.Expired = DateTime.UtcNow + ChunkedUploadSessionHolder.SlidingExpiration;

            if (chunkLength <= 0)
            {
                throw new Exception(FilesCommonResource.ErrorMassage_EmptyFile);
            }

            if (chunkLength > SetupInfo.ChunkUploadSize)
            {
                throw FileSizeComment.GetFileSizeException(SetupInfo.MaxUploadSize(TenantExtra, TenantStatisticsProvider));
            }

            var maxUploadSize = GetMaxFileSize(uploadSession.FolderId, uploadSession.BytesTotal > 0);

            if (uploadSession.BytesUploaded + chunkLength > maxUploadSize)
            {
                AbortUpload(uploadSession);
                throw FileSizeComment.GetFileSizeException(maxUploadSize);
            }

            var dao = DaoFactory.GetFileDao <T>();

            dao.UploadChunk(uploadSession, stream, chunkLength);

            if (uploadSession.BytesUploaded == uploadSession.BytesTotal)
            {
                var linkDao = DaoFactory.GetLinkDao();
                linkDao.DeleteAllLink(uploadSession.File.ID.ToString());

                FileMarker.MarkAsNew(uploadSession.File);
                ChunkedUploadSessionHolder.RemoveSession(uploadSession);
            }
            else
            {
                ChunkedUploadSessionHolder.StoreSession(uploadSession);
            }

            return(uploadSession);
        }
コード例 #5
0
ファイル: FileUploader.cs プロジェクト: ONLYOFFICE/AppServer
 public FileUploader(
     FilesSettingsHelper filesSettingsHelper,
     FileUtility fileUtility,
     UserManager userManager,
     TenantManager tenantManager,
     AuthContext authContext,
     SetupInfo setupInfo,
     TenantExtra tenantExtra,
     TenantStatisticsProvider tenantStatisticsProvider,
     FileMarker fileMarker,
     FileConverter fileConverter,
     IDaoFactory daoFactory,
     Global global,
     FilesLinkUtility filesLinkUtility,
     FilesMessageService filesMessageService,
     FileSecurity fileSecurity,
     EntryManager entryManager,
     IServiceProvider serviceProvider,
     ChunkedUploadSessionHolder chunkedUploadSessionHolder,
     FileTrackerHelper fileTracker)
 {
     FilesSettingsHelper      = filesSettingsHelper;
     FileUtility              = fileUtility;
     UserManager              = userManager;
     TenantManager            = tenantManager;
     AuthContext              = authContext;
     SetupInfo                = setupInfo;
     TenantExtra              = tenantExtra;
     TenantStatisticsProvider = tenantStatisticsProvider;
     FileMarker               = fileMarker;
     FileConverter            = fileConverter;
     DaoFactory               = daoFactory;
     Global                     = global;
     FilesLinkUtility           = filesLinkUtility;
     FilesMessageService        = filesMessageService;
     FileSecurity               = fileSecurity;
     EntryManager               = entryManager;
     ServiceProvider            = serviceProvider;
     ChunkedUploadSessionHolder = chunkedUploadSessionHolder;
     FileTracker                = fileTracker;
 }
コード例 #6
0
ファイル: FileUploader.cs プロジェクト: ONLYOFFICE/AppServer
        public ChunkedUploadSession <T> InitiateUpload <T>(T folderId, T fileId, string fileName, long contentLength, bool encrypted)
        {
            var file = ServiceProvider.GetService <File <T> >();

            file.ID            = fileId;
            file.FolderID      = folderId;
            file.Title         = fileName;
            file.ContentLength = contentLength;

            var dao           = DaoFactory.GetFileDao <T>();
            var uploadSession = dao.CreateUploadSession(file, contentLength);

            uploadSession.Expired     = uploadSession.Created + ChunkedUploadSessionHolder.SlidingExpiration;
            uploadSession.Location    = FilesLinkUtility.GetUploadChunkLocationUrl(uploadSession.Id);
            uploadSession.TenantId    = TenantManager.GetCurrentTenant().TenantId;
            uploadSession.UserId      = AuthContext.CurrentAccount.ID;
            uploadSession.FolderId    = folderId;
            uploadSession.CultureName = Thread.CurrentThread.CurrentUICulture.Name;
            uploadSession.Encrypted   = encrypted;

            ChunkedUploadSessionHolder.StoreSession(uploadSession);

            return(uploadSession);
        }
コード例 #7
0
 public static void AbortUpload(string uploadId)
 {
     AbortUpload(ChunkedUploadSessionHolder.GetSession(uploadId));
 }
コード例 #8
0
ファイル: FileUploader.cs プロジェクト: ONLYOFFICE/AppServer
        private void AbortUpload <T>(ChunkedUploadSession <T> uploadSession)
        {
            DaoFactory.GetFileDao <T>().AbortUploadSession(uploadSession);

            ChunkedUploadSessionHolder.RemoveSession(uploadSession);
        }
コード例 #9
0
ファイル: FileUploader.cs プロジェクト: ONLYOFFICE/AppServer
 public void AbortUpload <T>(string uploadId)
 {
     AbortUpload(ChunkedUploadSessionHolder.GetSession <T>(uploadId));
 }