代码:

首先,贴一个上传

 public static string UploadFileIntoDir(FileUpload MyFile, string DirName)
{
if (IfOkFile(DirName) == true)
{
string ReturnStr = string.Empty;
if (MyFile.FileContent.Length > )
{
MyFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath("../UploadFile/") + DirName);
//将原文件名与现在文件名写入ERPSaveFileName表中
//string NowName = DirName;
//修改下载文件换成源文件名称 + 时间节
string NowName = DirName;
string OldName = MyFile.FileName;
string SqlTempStr = "insert into ERPSaveFileName(NowName,OldName) values ('" + NowName + "','" + OldName + "')";
ZWL.DBUtility.DbHelperSQL.ExecuteSQL(SqlTempStr);
return OldName;
}
else
{
return ReturnStr;
}
}
else
{
if (MyFile.FileName.Length > )
{
System.Web.HttpContext.Current.Response.Write("<script>alert('不允许上传此类型文件!');</script>");
return "";
}
else
{
return "";
}
}
}

  这里的意思就是上传一个简单的文件到服务器,就是到相对于项目路径的文件夹下面。

  然后,贴一个下载代码:

         System.IO.Stream iStream = null;
byte[] buffer = new Byte[];
int length;
long dataToRead;
string filepath = System.Web.HttpContext.Current.Server.MapPath(FilePath);
string filename = System.IO.Path.GetFileName(filepath);
try
{
iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
dataToRead = iStream.Length;
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(FileName));
while (dataToRead > )
{
if (Response.IsClientConnected)
{
length = iStream.Read(buffer, , );
Response.OutputStream.Write(buffer, , length);
Response.Flush();
buffer = new Byte[];
dataToRead = dataToRead - length;
}
else
{
dataToRead = -;
}
}
}
catch (Exception ex)
{
string message = ex.Message;
this.Page.ClientScript.RegisterStartupScript(GetType(), "Message", "<script>alert('Error : " + message + "');</script>");
}
finally
{
if (iStream != null)
{
iStream.Dispose();
}
}

  这里的代码之所以这么写是因为需要流处理数据。

  顺便给大家一个小小的下载提示:我们保存文件的时候害怕文件同名会用DateTime.Now.Ticks来防止文件名重复,但是下载的时候就有一个苦恼了,大家看着一大推的数字,根本分不清楚到底哪个是哪个,那么,现在可以建立一个独立的页面,然后,这个页面就只有这个方法,就像二进制图片的我们要释放那样,首先建立一个独立的页面,然后从后台的二进制传递上来的时候去接收,然后再另外的页面放img标签,把这个二进制的页面给放进去,就是这样,我们就可以给文件任意命名了。

  到了主题了,主题就是这里的下载有问题,03和03以下的office组件可以任意,但是07的组件,因为存在备份文件(特别是docx),下载之后打开的时候会出现

小伙伴们千万不要着急,这个问题我也遇到了(这是点击确定,然后继续点击是,还是可以得到原来的信息的么),通过两天的纠结,问题的根找出来了,就是流搞的鬼,因为这里的流虽然finally释放了,但是因为备份,所以释放的并不完整,那么

请使用 using{}

 string filepath = System.Web.HttpContext.Current.Server.MapPath(FilePath);
string filename = System.IO.Path.GetFileName(FilePath);
using (var iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
System.IO.FileAccess.Read, System.IO.FileShare.Read))
{
Response.Clear();
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" +
System.Web.HttpUtility.UrlEncode(FileName));
iStream.CopyTo(Response.OutputStream);
Response.End();
}

还是.Net Framework设计的好呀,直接using,把人家发现的内存直接释放,完美解决

至于平时的文件说的 无法打开 Office Open Xml,请点击此处

.Net 无法打开Offie Open XML文件(上传和下载使用)的更多相关文章

  1. Android文件上传与下载

    文件上传与下载 文件上传 -- 服务端 以Tomcat为服务器,Android客服端访问Servlet,经Servlet处理逻辑,最终将文件上传,这里就是简单模拟该功能,就将文件上传到本机的D:\\u ...

  2. springboot+web文件上传和下载

    一.首先安装mysql数据库,开启web服务器. 二.pom.xml文件依赖包配置如下: <?xml version="1.0" encoding="UTF-8&q ...

  3. 0062 Spring MVC的文件上传与下载--MultipartFile--ResponseEntity

    文件上传功能在网页中见的太多了,比如上传照片作为头像.上传Excel文档导入数据等 先写个上传文件的html <!DOCTYPE html> <html> <head&g ...

  4. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  5. (转载)JavaWeb学习总结(五十)——文件上传和下载

    源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...

  6. JavaWeb学习总结,文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  7. 使用jsp/servlet简单实现文件上传与下载

    使用JSP/Servlet简单实现文件上传与下载    通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...

  8. JavaWeb学习总结(五十)——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  9. Struts2 之 实现文件上传和下载

    Struts2  之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...

  10. 十六、Struts2文件上传与下载

    文件上传与下载 1.文件上传前提:<form action="${pageContext.request.contextPath}/*" method="post& ...

随机推荐

  1. 转 eclipse 快捷键

    1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如applic*.xm ...

  2. 【项目构建工具】 Gradle笔记2

    一.Gradle执行流程 1.Gradle的执行流程(生命周期)主要是三个阶段: 初始化阶段:解析整个工程中所有Project,构建所有的Project对应的project对象 配置阶段:解析所有的p ...

  3. python、第六篇:视图、触发器、事务、存储过程、函数

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  4. deepin下挂载的的Windows系统(NTFC)目录怎么是只读的???

    关键命令: df-h sudo ntfsfix /dev/sda4 重启 参考博客:深度官网问题之大神回复

  5. 架构师成长之路5.1-Saltstack安装及入门

    点击架构师成长之路 架构师成长之路5.1-Saltstack安装及入门 (安装.配置.启动) 配置管理工具: Pupper:1. 采用ruby编程语言:2. 安装环境相对较复杂:3.不支持远程执行,需 ...

  6. oracle 数据库启动停止小结

    ---登录sqlplus sqlplus  /nolog conn / as sysdba shutdown immediate --启动数据库有两种方式 startup 会自动完成重启数据库的所有步 ...

  7. zencart通过产品id 批量添加推荐产品

    1.修改 admin/featured.php 查找 pre_add_confirmation 将 pre_add_confirmation 与  break; 之间的代码,用下面的代码替换即可 &l ...

  8. Ubuntu caffe 测试matlab接口

    这是17年8月份新增的: make matcaffe error 255解决:在Makefile里面,大约第410行那一句话CXXFLAGS += -MMD -MP下面添加CXXFLAGS += -s ...

  9. Nginx虚拟主机多server_name的顺序问题

    Nginx虚拟主机多server_name的顺序问题  大 | 中 | 小  [ 2008-11-28 11:27 | by 张宴 ] [文章作者:张宴 本文版本:v1.0 最后修改:2008.11. ...

  10. JZOJ5358【NOIP2017提高A组模拟9.12】BBQ

    题目 分析 发现,\(C_{ai+aj+bi+bj}^{ai+aj}\),其实就等于从(0,0)走最短路到(ai+aj,bi+bj). 我们可以想办法将i.j分开,从(0,0)走最短路到(ai+aj, ...