今天看看后台怎么处理上传的文件。
这个CSDN的页面编辑的时候加粗,显示不了。
第一种方式,直接解析。
try
{
foreach (string upload in HttpContext.Current.Request.Files)
{
if (upload == null && upload.Trim() == "")
{
continue;
}
System.Web.HttpPostedFile postedFile = HttpContext.Current.Request.Files[upload];
string filename = Path.GetFileName(postedFile.FileName);
if (filename.Length < 4)
return this.CreateResult(BusinessStatusCode.Error, "请选择需要导入的文件!");
string strExName = filename.Substring(filename.Length - 4, 4);
if (strExName.ToLower() != ".csv" && strExName.ToLower() != ".xls" && strExName.ToLower() != ".xlsx")
return this.CreateResult(BusinessStatusCode.Error, "文件类型不正确,请重新操作");
//在上传文件不为空的情况下,验证文件名以及大小是否符合,如果不符合则不允许上传
//在这里通过检查文件头与文件名是否匹配 从而限制了文件上传类型 注:可上传的类型有XLS,且大小只能为5M一下
if (postedFile.ContentLength / 1024 > 5120)
return this.CreateResult(BusinessStatusCode.Error, "数据文件过大,请重新操作");
//处理出金的结果
bool result = WithdrawToService(fileNamePath);
System.IO.Stream MyStream;
byte[] bytes = new byte[postedFile.ContentLength];
MyStream = postedFile.InputStream;
MyStream.Read(bytes, 0, postedFile.ContentLength);
string str = System.Text.Encoding.Default.GetString(bytes);
if (result)
return this.CreateResult(BusinessStatusCode.Success, "提交成功");
else
return this.CreateResult(BusinessStatusCode.Error, "记录未完成提交成功,请检查");
}
}
catch (Exception ex)
{
this.CreateResult(BusinessStatusCode.Error, ex.Message);
}
注意加粗的地方就是把上传的文件直接转成string处理了。
第二种方式,我个人考虑是为了复查方便,所以先存好文件,如果数据不一样还可以比较。特别是维护的时候方便。
try
{
foreach (string upload in HttpContext.Current.Request.Files)
{
if (upload == null && upload.Trim() == "")
{
continue;
}
System.Web.HttpPostedFile postedFile = HttpContext.Current.Request.Files[upload];
string filename = Path.GetFileName(postedFile.FileName);
if (filename.Length < 4)
return this.CreateResult(BusinessStatusCode.Error, "请选择需要导入的文件!");
string strExName = filename.Substring(filename.Length - 4, 4);
if (strExName.ToLower() != ".csv" && strExName.ToLower() != ".xls" && strExName.ToLower() != ".xlsx")
return this.CreateResult(BusinessStatusCode.Error, "文件类型不正确,请重新操作");
//在上传文件不为空的情况下,验证文件名以及大小是否符合,如果不符合则不允许上传
//在这里通过检查文件头与文件名是否匹配 从而限制了文件上传类型 注:可上传的类型有XLS,且大小只能为5M一下
if (postedFile.ContentLength / 1024 > 5120)
return this.CreateResult(BusinessStatusCode.Error, "数据文件过大,请重新操作");
string path = AppDomain.CurrentDomain.BaseDirectory + "Withdraw\\";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string fileNamePath = path + filename;
postedFile.SaveAs(fileNamePath);
//处理出金的结果
bool result = WithdrawToService(fileNamePath);
if (result)
return this.CreateResult(BusinessStatusCode.Success, "提交成功");
else
return this.CreateResult(BusinessStatusCode.Error, "记录未完成提交成功,请检查");
}
}
catch (Exception ex)
{
this.CreateResult(BusinessStatusCode.Error, ex.Message);
}
主要注意的地方是调用saveas接口这样就可以了。然后再读出来即可。
// 从服务器上读取文件
StreamReader reader = new StreamReader(fileNamePath, Encoding.GetEncoding("GB2312"));
int headerLine = 3;
int withdrawLength = 9;
int i = 0;
string s;
bool isHasError = true;
//将头解析
while ((s=reader.ReadLine()) !=null)
{
i++;
if (i >= headerLine)
break;
}
//解析出金数据流
while((s=reader.ReadLine()) != null)
{
string[] detail = s.Split(',');
}
// 关闭文件流
reader.Close();
注意三个地方。
第一,通过StreamReader读取文件
第二,通过reader.ReadLine()逐行解析文本。
第三,记得关闭文件流。