上载文件操作有时失败,文件大小为0KB

时间:2019-11-18 06:18:51

标签: c# asp.net file upload

我的同事遇到文件上传问题,上传后有时保存文件为0kb。这种情况偶尔发生,并且很难找出根本原因。 他将网站部署在Web服务器中,并在文件服务器中调用我的上传文件服务webapi。 这两个项目都部署在窗口服务器中。有人可以帮忙吗?

他的代码:

private string UploadFile(string lsh, string fileName, byte[] fileData, string guid)
        {
            string url = ConfigHelper.GetAppConfig("UploadUrl") + "?moduleTag=" + REPORTMODULETAG + "&relativePath=" + string.Format(RelativePath, lsh, AConstant.Folder_8);
            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.AcceptCharset.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("UTF-8"));
                MultipartFormDataContent content = new MultipartFormDataContent();
                string key = string.IsNullOrEmpty(guid) ? "file" : guid;
                fileName = HttpUtility.UrlEncode(fileName);
                content.Add(new ByteArrayContent(fileData), key, fileName);
                return client.PostAsync(url, content).Result.Content.ReadAsStringAsync().Result;
            }
        }

我的代码:

   [HttpPost]
        public string UploadFile(int moduleTag, string relativePath = "")
        {
            string result = "no file uploaded ";
            if (relativePath.Contains("."))
                throw new Exception("Invalid relativePath");
            relativePath = relativePath.Replace("/", "\\").TrimStart('\\'); 
            var files = HttpContext.Current.Request.Files;
            List<string> fileGuids = new List<string>();
            if (files.Count > 0)
            {
                using (AmcarelabDbContainer db = new AmcarelabDbContainer())
                {
                    string modulePath = moduleTag.ToString();
                    foreach (string key in files.AllKeys)
                    {
                        string fileName = HttpUtility.UrlDecode(files[key].FileName);
                        Guid uid = Guid.NewGuid();
                        string uidName = uid.ToString() + Path.GetExtension(fileName);
                        string absolutePath = Path.Combine(m_PhysicalPath, modulePath, relativePath, uidName);
                        string dir = Path.GetDirectoryName(absolutePath);
                        if (Util.IsGuid(key))
                        {
                            SY_UploadFile fileInfo = db.SY_UploadFile.FirstOrDefault(item => item.GUID.ToString() == key);
                            if (fileInfo != null)
                            {
                                // update operation
                                uid = new Guid(key);
                                uidName = uid + Path.GetExtension(fileInfo.FileName);
                                absolutePath = Path.Combine(m_PhysicalPath, fileInfo.ModuleTag.ToString(), fileInfo.RelativePath, uidName);
                                File.Delete(absolutePath);// delete old file

                                uidName = uid + Path.GetExtension(fileName);
                                absolutePath = Path.Combine(m_PhysicalPath, modulePath, relativePath, uidName);
                                dir = Path.GetDirectoryName(absolutePath);
                                if (!Directory.Exists(dir))
                                {
                                    Directory.CreateDirectory(dir);
                                }
                                files[key].SaveAs(absolutePath);// save file 

                                // update database
                                fileInfo.FileName = fileName;
                                fileInfo.CreateTime = DateTime.Now;
                                fileInfo.RelativePath = relativePath;
                                fileInfo.ModuleTag = moduleTag;
                                fileInfo.FilePath = Util.UriAppend(new Uri(m_UrlPath), modulePath, relativePath.Replace("\\", "/"), uidName).AbsoluteUri;

                                fileGuids.Add(uid.ToString());
                                continue;
                            }
                        }
                        // add operation
                        if (!Directory.Exists(dir))
                        {
                            Directory.CreateDirectory(dir);
                        }
                        SY_UploadFile uploadFile = new SY_UploadFile()
                        {
                            GUID = uid,
                            ModuleTag = moduleTag,
                            FileName = fileName,
                            CreateTime = DateTime.Now,
                            Avaliable = false,
                            RelativePath = relativePath,
                            FilePath = Util.UriAppend(new Uri(m_UrlPath), modulePath, relativePath.Replace("\\", "/"), uidName).AbsoluteUri
                        };
                        db.SY_UploadFile.Add(uploadFile);

                        fileGuids.Add(uid.ToString());
                        files[key].SaveAs(absolutePath);
                    }
                    result = string.Join(GUIDSplitTag, fileGuids);

                    db.SaveChanges();
                }
            }

            return result;
        }

0 个答案:

没有答案