Example #1
0
        public static void MoveCacheToFile(StreamIdentifier <TId> streamIdentifier, Guid cacheId, TId fileId)
        {
            var cacheFolder   = StreamIdentifierCache.GetCachFolderPath(cacheId);
            var fileCachePath = Path.Combine(cacheFolder, "file");
            var dataCachePath = Path.Combine(cacheFolder, "data");

            var saveFolder = streamIdentifier.DirectoryManager.GetFolderPath(fileId);

            if (CrossDirectoryInfo.Current.Exists(saveFolder))
            {
                throw new Exception("directory exist!");
            }
            CrossDirectoryInfo.Current.CreateDirectory(saveFolder);
            CrossFileInfo.Current.Move(fileCachePath, Path.Combine(saveFolder, "file"));
            var dataCache = JsonConvert.DeserializeObject <FileInfoCache>(CrossFileInfo.Current.ReadAllText(dataCachePath, Encoding.UTF8));

            FileInfo <TId> fileInfo = new FileInfo <TId>()
            {
                CreatedDateTime = DateTime.Now,
                Id         = fileId,
                FileName   = dataCache.FileName,
                FileSize   = dataCache.FileSize,
                IsComplete = true,
                DataType   = dataCache.DataType
            };

            CrossFileInfo.Current.WriteAllText(Path.Combine(saveFolder, "data"), JsonConvert.SerializeObject(fileInfo), Encoding.UTF8);
            DeleteFolder(cacheId);
        }
Example #2
0
        internal static bool DeleteFolder(Guid cacheId)
        {
            try
            {
                var saveFolder = StreamIdentifierCache.GetCachFolderPath(cacheId);

                while (saveFolder.Length > StreamIdentifierCache.DefaultCacheFolderPath.Length)
                {
                    if (CrossDirectoryInfo.Current.GetDirectories(saveFolder).Length == 0)
                    {
                        CrossDirectoryInfo.Current.Delete(saveFolder, true);
                    }
                    else
                    {
                        break;
                    }
                    saveFolder = Path.GetDirectoryName(saveFolder);
                }
                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Example #3
0
        public StreamIdentifierFileUploadResult StartUpload(FileInfoCache fileInfoCache, Stream streamToSave, long startPosition, long length)
        {
            try
            {
                CurrentFileInfoCache = fileInfoCache;
                CurrentStream        = streamToSave;
                bool haveToRemove = false;
                StreamIdentifierCache disposeStreamIdentifier = null;
                lock (staticLock)
                {
                    if (UploadingStreamsByGuid.TryGetValue(fileInfoCache.Id, out disposeStreamIdentifier))
                    {
                        haveToRemove = true;
                    }
                    else
                    {
                        UploadingStreamsByGuid.TryAdd(fileInfoCache.Id, this);
                    }
                }
                if (haveToRemove)
                {
                    disposeStreamIdentifier.Dispose();
                }

                var folderPath = GetCachFolderPath(fileInfoCache.Id);

                if (!CrossDirectoryInfo.Current.Exists(folderPath))
                {
                    CrossDirectoryInfo.Current.CreateDirectory(folderPath);
                }
                var filePath = Path.Combine(folderPath, "file");
                var dataPath = Path.Combine(folderPath, "data");
                CrossFileInfo.Current.WriteAllText(dataPath, JsonConvert.SerializeObject(fileInfoCache), Encoding.UTF8);
                using (FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                {
                    fileStream.Seek(startPosition, SeekOrigin.Begin);
                    byte[] readBytes = new byte[1024 * 200];
                    long   writed    = 0;
                    while (!isDisposed)
                    {
                        var readCount = streamToSave.Read(readBytes, 0, readBytes.Length);
                        if (readCount <= 0)
                        {
                            break;
                        }
                        fileStream.Write(readBytes, 0, readCount);
                        writed += readCount;
                        if (writed == length)
                        {
                            break;
                        }
                    }
                    if (fileStream.Length > fileInfoCache.FileSize)
                    {
                        fileStream.SetLength(fileInfoCache.FileSize);
                    }
                    if (fileStream.Length == fileInfoCache.FileSize)
                    {
                        fileStream.Seek(0, SeekOrigin.Begin);
                        var checkSum = FileChecksumMaker.GetFileCheckSum(fileStream);
                        var errors   = FileChecksumMaker.GetErrorsFromTwoCheckSum(checkSum, fileInfoCache.FileChecksumInfo);
                        if (errors.Count == 0)
                        {
                            return(StreamIdentifierFileUploadResult.Success);
                        }
                        else
                        {
                            return(StreamIdentifierFileUploadResult.FileCheckSumIsWrong);
                        }
                    }
                    else
                    {
                        return(StreamIdentifierFileUploadResult.FileSizeIsWrong);
                    }
                }
            }
            catch (Exception ex)
            {
                return(StreamIdentifierFileUploadResult.Exception);
            }
            finally
            {
                Dispose();
            }
        }