//public ActionResult Test() //{ // string accessToken = "prE27SQYE58WyfmXx0RD6RQSqmKoHHxmGUQTojSgVsL0lV7g1RcI2DpA3ELJdNvdWNjFsR9kMbhC2Mht9bJDPva7ZRcRYRDV73DDUsYpa-YTZBcAIAPVX"; // MaterialApi.AddNormalMaterial(accessToken, "D:\\a.jpg", MaterialType.Image); // return View(); //} private FileUploadResult SaveFile() { FileUploadResult fileUploadResult = new FileUploadResult(); HttpRequestBase request = this.HttpContext.Request; string strFileId = request.Form["txtFileUpload_Id"]; if (String.IsNullOrEmpty(strFileId)) { fileUploadResult.Message = "参数不正确。"; return(fileUploadResult); } Guid fileId = Guid.Parse(strFileId); string cachingKey = "fsUploadResult:" + strFileId; if (_cachingService.ContainsKey(cachingKey)) { fileUploadResult.Message = "请勿重复上传。"; _cachingService.Set(cachingKey, fileUploadResult, _uploadResultExpiresIn); return(fileUploadResult); } //鉴权 string userId = request.Form["txtFileUpload_UserId"]; if (_controlledCachingService.Contains(userId) == false) { fileUploadResult.Message = "用户鉴权失败。"; _cachingService.Set(cachingKey, fileUploadResult, _uploadResultExpiresIn); return(fileUploadResult); } if (request.Files.Count == 0) { fileUploadResult.Message = "没有要上传的文件。"; _cachingService.Set(cachingKey, fileUploadResult, _uploadResultExpiresIn); return(fileUploadResult); } if (request.Files.Count > 1) { fileUploadResult.Message = "一次只能上传一个文件。"; _cachingService.Set(cachingKey, fileUploadResult, _uploadResultExpiresIn); return(fileUploadResult); } HttpPostedFileBase file = request.Files[0]; if (file.ContentLength / 1024 > 2048) { fileUploadResult.Message = String.Format("文件大小请勿超过:{0} KB", 2048); _cachingService.Set(cachingKey, fileUploadResult, _uploadResultExpiresIn); return(fileUploadResult); } FileInfo fileInfo = new FileInfo(file.FileName); SaveArgs args = new SaveArgs(); args.Id = fileId; args.Domain = Guid.Parse(request.Form["txtFileUpload_Domain"]); args.FileName = fileInfo.Name; args.FileExtension = fileInfo.Extension; //args.MD5 = request.Form["md5"]; args.UploadDate = DateTime.Now; args.UploadIPAddress = Request.UserHostAddress; args.Stream = file.InputStream; //"D:\\WorkFloder\\Linkup\\trunk\\Source Code\\FileService\\Linkup.FileService\\File" //最后会有一个控制器的虚拟路径,所以 MapPath("/") //args.ServerRootDir = Server.MapPath("/"); fileUploadResult = _fileManager.Save(args); _cachingService.Set(cachingKey, fileUploadResult, _uploadResultExpiresIn); return(fileUploadResult); }
internal FileUploadResult Save(SaveArgs args) { FileUploadResult result = new FileUploadResult(); //流长度在关闭释放流之后就取不到了 int length = (int)(args.Stream.Length / 1024); FileStream fsWrite = null; Stream stream = null; string storeFileName; #region 存储文件 try { string targetDir = Path.Combine(_serverRootDir, "FileStore", args.Domain.ToString()); if (Directory.Exists(targetDir) == false) { Directory.CreateDirectory(targetDir); } storeFileName = Guid.NewGuid().ToString() + args.FileExtension; string outputFileName = Path.Combine(targetDir, storeFileName); ////Path.Combine 是 \, HTTP 地址用的是 / ////但是序列化时,会对 / 转义成 \/ //result.RelativeUri = "FileStore" + "/" + _site.SiteInfo.Code + "/" + storeFileName; byte[] buffer = new byte[4096]; fsWrite = new FileStream(outputFileName, FileMode.Create); stream = args.Stream; stream.Position = 0; int read = 0; do { read = stream.Read(buffer, 0, buffer.Length); fsWrite.Write(buffer, 0, read); } while (read > 0); } catch (Exception ex) { _exceptionHandling.HandleException(ex); result.Message = ex.Message; result.Success = false; return(result); } finally { if (fsWrite != null) { fsWrite.Flush(); fsWrite.Close(); fsWrite.Dispose(); } if (stream != null) { stream.Close(); stream.Dispose(); } } #endregion //存储数据库记录 FileRecord record = new FileRecord(); record.Id = args.Id; record.Domain = args.Domain; record.FileName = args.FileName; record.StoredFileName = storeFileName; record.Length = length; record.MD5 = args.MD5; record.UploadDate = args.UploadDate; record.UploadIPAddress = args.UploadIPAddress; _dataBase.Insert(record); result.Success = true; result.Id = args.Id; result.StoreFilePath = String.Format("FileStore/{0}/{1}", args.Domain, storeFileName); return(result); }