C# web实现下载文件(二)
该方法同样比较简单,后台部分处理:
使用这个类来生成excel文件
EPPlusExcel excel = new EPPlusExcel();
接收前台界面传送过来的文本文件,再进行分割处理
string textarea = Request.Params["textarea"].Trim().ToUpper();
var data = textarea.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
var sns = "";
for (int i = 0; i < data.Length; i++)
{
sns += "'" + data[i] + "',";
}
连接sqlserver数据库获取需求数据,将数据转换成DataTable的形式
sns = sns.Remove(sns.Length - 1);
var sel = @"SELECT *
FROM dbo.XXX";
var con = @"server=192.168.1.1,1433;Initial Catalog=DB;Persist Security Info=True;User ID=XX;password=XX";
sel = string.Format(sel, sns);
var dt = SqlHelper.GetDataTable(con, sel);
取服务器端文件存储的路径
string path = Server.MapPath("~/Doc/REPORT");
var temppath = Path.Combine(Path.Combine(path, DateTime.Now.ToString("yyyy/MM/dd")));
if (!Directory.Exists(temppath))
{
Directory.CreateDirectory(temppath);
}
设置生成的文件名,如果有同名文件存在,则删除掉旧的文件
var filename = string.Format(@"{0}_{1}.xlsx", data[0], data[data.Length - 1]);
string fullFileName = Path.Combine(temppath, filename);
if (System.IO.File.Exists(fullFileName))
{
System.IO.File.Delete(fullFileName);
}
生成excel文件
excel.Save(dt, fullFileName, true, new Dictionary<int, string> { { 18, "yyyy-mm-dd hh:mm:ss.000" } });
返回前台文件路径
Models.FunResult ret = new Models.FunResult()
{
Result = true,
Message = fullFileName
};
return ContentRet<dynamic>(ret);
后台另有ReportDownload方法统一处理excel文件路径
var fullpath = Request.QueryString.Get(0);
return File(new FileStream(fullpath, FileMode.Open), "application/vnd.ms-excel",
Path.GetFileName(fullpath));
前台JS发送请求
this.loading = this.$loading({
lock: true,
text: '数据导出中',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$http.post("../../Server/ReqReport?textarea="+ this.ruleForm1.textarea).then(result => {
var response = result.body;
this.loading.close();
if (response.Result===false) {
this.$message.error(response.Message);
}
else{
window.open("../../Server/ReportDownload?file="+response.Message);
}
})