Ejemplo n.º 1
0
        public IActionResult  UploadAttachment([FromForm] FileChunksModel model)
        {
            if (model.file == null)
            {
                return(BadRequest());
            }
            if (model.chunked)
            {
                //var file = Request.Form.Files[0];
                var file = model.file;
                //取得chunk和chunks
                int    chunk  = Convert.ToInt32(Request.Form["chunk"]);  //当前分片在上传分片中的顺序(从0开始)
                int    chunks = Convert.ToInt32(Request.Form["chunks"]); //总分片数
                var    folder = Path.Combine(_hostingEnvironment.WebRootPath, "chunk\\" + Request.Form["uid"] + "\\");
                string path   = folder + chunk;
                //建立临时传输文件夹
                if (!Directory.Exists(Path.GetDirectoryName(folder)))
                {
                    Directory.CreateDirectory(folder);
                }

                FileStream   addFile    = null;
                BinaryWriter AddWriter  = null;
                Stream       stream     = null;
                BinaryReader TempReader = null;

                try
                {
                    //addFile = new FileStream(path, FileMode.Append, FileAccess.Write);
                    addFile   = new FileStream(path, FileMode.Create, FileAccess.Write);
                    AddWriter = new BinaryWriter(addFile);
                    //获得上传的分片数据流
                    stream     = model.file.OpenReadStream();
                    TempReader = new BinaryReader(stream);
                    //将上传的分片追加到临时文件末尾
                    AddWriter.Write(TempReader.ReadBytes((int)stream.Length));
                }
                finally
                {
                    if (addFile != null)
                    {
                        addFile.Close();
                        addFile.Dispose();
                    }
                    if (AddWriter != null)
                    {
                        AddWriter.Close();
                        AddWriter.Dispose();
                    }
                    if (stream != null)
                    {
                        stream.Close();
                        stream.Dispose();
                    }
                    if (TempReader != null)
                    {
                        TempReader.Close();
                        TempReader.Dispose();
                    }
                }
                return(Ok(new { nextchunk = chunk + 1 }));
            }
            else
            {
                // 文件大小
                long size = 0;
                //var file = Request.Form.Files[0];
                var filename = ContentDispositionHeaderValue.Parse(model.file.ContentDisposition).FileName;
                // 扩展名
                var extName = filename.Substring(filename.LastIndexOf('.')).Replace("\"", "");

                // 新文件名
                string shortfilename = $"{Guid.NewGuid()}{extName}";

                var filePath = Path.Combine(_hostingEnvironment.WebRootPath, shortfilename);
                //保存到绝对路径

                // 设置文件大小
                size += model.file.Length;

                // 创建新文件
                using (FileStream fs = System.IO.File.Create(filePath))
                {
                    // 复制文件
                    model.file.CopyTo(fs);
                    // 清空缓冲区数据
                    fs.Flush();
                }

                return(Ok("上传完成!"));
            }
        }