我的同事遇到文件上传问题,上传后有时保存文件为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;
}