Exemple #1
0
        /// <summary>
        /// 断点续传检测、MD5检测
        /// </summary>
        /// <returns></returns>
        public UploaderResult ProcessCheck(HttpRequestBase request, string saveFileName, string savepath = null
                                           , Func <HttpPostedFileBase, string> setfilename = null, Func <string, bool> md5check = null)
        {
            long o = _webUploaderField.Size % _webUploaderField.Chunksize;



            int chunks = _webUploaderField.Chunksize != 0 ?
                         Convert.ToInt32(_webUploaderField.Size / _webUploaderField.Chunksize) : 1;

            if (o != 0)
            {
                chunks = chunks + 1;
            }
            UploaderResult obj = new UploaderResult();

            if (md5check(_webUploaderField.Md5))
            {
                obj.Filish     = true;
                obj.FileExtist = true;//表明文件已存在于服务器
                obj.Message    = "文件已存在于服务器、跳过上传";
                return(obj);
            }
            WebUploader.allChunks[_webUploaderField.FileSavePath] = new List <int>();
            int j = 0;

            for (int i = 0; i < chunks; i++)
            {
                if (File.Exists(_webUploaderField.FileSaveChunkPath + i.ToString()))
                {
                    obj.ChunkNum.Add(i);//服务器已经存在的区块编号
                    WebUploader.allChunks[_webUploaderField.FileSavePath].Add(i);
                    j++;
                }
            }
            obj.Filish  = false;
            obj.Message = string.Format("服务器已经存在区块数量{0},总区块数量{1},占比{2}%", j
                                        , _webUploaderField.Chunks, _webUploaderField.Chunks != 0 && j != 0
                ? Convert.ToDouble(Convert.ToDouble(j) / Convert.ToDouble(_webUploaderField.Chunks)) * 100 : 0);
            return(obj);
        }
Exemple #2
0
        /// <summary>
        /// 上传分片文件
        /// </summary>
        /// <param name="request"></param>
        /// <param name="saveFileName"></param>
        /// <param name="savepath"></param>
        /// <param name="setfilename"></param>
        /// <param name="md5check"></param>
        /// <returns></returns>
        public UploaderResult Process(HttpRequestBase request, string saveFileName, string savepath = null
                                      , Func <HttpPostedFileBase, string> setfilename = null, Func <string, bool> md5check = null)
        {
            InitWebUploaderField(request, savepath, saveFileName);

            #region 跳转到分片检测
            if (request[chunkFlag] != null && Convert.ToBoolean(request[chunkFlag]))
            {
                return(ProcessCheck(request, saveFileName, savepath, setfilename, md5check));
            }
            #endregion

            UploaderResult obj = new UploaderResult();

            _webUploaderField.File = request.Files.Count == 0 ? null : request.Files[0];

            _webUploaderField.Filename = _webUploaderField.File == null ? "" : _webUploaderField.File.FileName;

            if (_webUploaderField.File == null)
            {
                obj.Message = "上传文件为空";
                return(obj);
            }
            //创建文件夹(查看路径是否存在)
            if (!Directory.Exists(_webUploaderField.Path))
            {
                Directory.CreateDirectory(_webUploaderField.Path);
            }
            if (_webUploaderField.Chunks != 0)
            {
                WebUploader.allChunks[_webUploaderField.FileSavePath].Add(_webUploaderField.Chunk);
                //_webUploaderField.File.SaveAs(_webUploaderField.FileSaveChunkPath + _webUploaderField.Chunk)
                try
                {
                    Stream stream = _webUploaderField.File.InputStream;
                    byte[] b      = new byte[stream.Length];//新建一个字节数组
                    stream.Read(b, 0, b.Length);
                    // 设置当前流的位置为流的开始
                    stream.Seek(0, SeekOrigin.Begin);
                    using (FileStream fstream = new FileStream(_webUploaderField.FileSaveChunkPath + _webUploaderField.Chunk, FileMode.Create, FileAccess.Write))
                    {
                        fstream.Write(b, 0, b.Length);
                    }
                }
                catch
                {
                }
                obj.Filish  = false;
                obj.Message = string.Format("当前上传区块{0},总区块:{1},模式:分片上传", _webUploaderField.Chunk, _webUploaderField.Chunks);
                if (WebUploader.allChunks[_webUploaderField.FileSavePath].Count == _webUploaderField.Chunks)
                {
                    var file            = _webUploaderField.FileSavePath;
                    var currentSavePath = file.Substring(0, file.LastIndexOf('\\'));
                    var fileSuffix      = file.Substring(file.LastIndexOf("."), file.Length - file.LastIndexOf("."));
                    var sFileName       = file.Substring(file.LastIndexOf('\\') + 1, file.LastIndexOf('.') - file.LastIndexOf('\\') - 1);
                    //saveFileName = saveFileName + fileSuffix;
                    saveFileName = (currentSavePath + "\\" + sFileName + fileSuffix);

                    using (FileStream fsw = new FileStream(saveFileName, FileMode.Create, FileAccess.Write, FileShare.Write))
                    {
                        BinaryWriter bw = new BinaryWriter(fsw);
                        for (int j = 0; j < _webUploaderField.Chunks; j++)
                        {
                            if (File.Exists(_webUploaderField.FileSaveChunkPath + j))
                            {
                                bw.Write(File.ReadAllBytes(_webUploaderField.FileSaveChunkPath + j));
                                bw.Flush();
                                File.Delete(_webUploaderField.FileSaveChunkPath + j);
                            }
                            else
                            {
                            }
                        }
                        //bw.Flush();
                    }
                    List <int> filekeyvalue = new List <int>();
                    obj.Name = _webUploaderField.Filename;
                    WebUploader.allChunks.TryRemove(_webUploaderField.FileSavePath, out filekeyvalue);
                    obj.Filish  = true;
                    obj.Message = string.Format("上传已全部完成");
                }
            }
            else
            {
                _webUploaderField.File.SaveAs(_webUploaderField.FileSavePath);
                obj.Filish  = true;
                obj.Name    = _webUploaderField.Filename; //文件最终保存名称
                obj.Message = "上传已完成、模式 no chunk";
            }
            return(obj);
        }