代码:

首先,贴一个上传

 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. jQuery制作弹出窗(模态框)

    来源:(二少)在南极 ##index.html <!DOCTYPE html><html lang="zh"><head> <meta c ...

  2. Spark 2.43读取.json文件入库到MySQL 8

    如果没有安装包,可以用我的这个 百度网盘链接点击进入 提取码: eku1 解压之后 准备开始配置环境变量 如果运行时候报错参考 (java.io.IOException: Could not loca ...

  3. SAP中MM模块基础数据之Quota Arrangement(配额协议)的解析

    有的时候我们的采购部门有这样的需求, 同一颗物料有几个供应商同时供料, 这个时候就涉及到一个问题, 避免出现总是和一家供应商购买物料的情况,我们需求把这些物料按照一定的比列分配给供应商.在SAP系统中 ...

  4. shell cat EOF 变量自动解析问题

    使用如下shell安装node时,一直提示 command not found wget https://mirrors.huaweicloud.com/nodejs/latest-v8.x/node ...

  5. 多线程 - 线程通信 suspend-resume wait-notify park-unpark 伪唤醒

    线程通信(如 线程执行先后顺序,获取某个线程执行的结果等)有多种方式: 文件共享 线程1 --写入--> 文件 < --读取-- 线程2 网络共享 变量共享 线程1 --写入--> ...

  6. Java语言基础(2)

    1 包的概念 把一个项目分割成几个模块,为每一个模块建立包,把该模块的.java文件统一放到对应包,通过包更好的管理.java文件,并且更好的分工合作.可以尽量避免出现.java文件重名现象. 包命名 ...

  7. poj1015 Jury Compromise[背包]

    每一件物品有两个属性.朴素思想是把这两种属性都设计到状态里,但空间爆炸.又因为这两个属性相互间存在制约关系(差的绝对值最小),不妨把答案设计入状态中,设$f[i][j]$选$i$个人,两者之差$j$. ...

  8. orm查询优化 MTV和MVC模型 字段的chioces参数 Ajax

    目录 一.ORM查询优化 1. all()查询 2. only()/defer()方法 (1)only()方法 (2)defer()方法 3. select_related()/prefetch_re ...

  9. 通俗易懂的例子解释 IAAS、SAAS、PAAS 的区别

    你一定听说过云计算中的三个“高大上”的你一定听说过云计算中的三个“高大上”的概念:IaaS.PaaS和SaaS,这几个术语并不好理解.不过,如果你是个吃货,还喜欢披萨,这个问题就好解决了!好吧,其实你 ...

  10. 微信小程序没找到构建npm或者没找到node_modules目录以及如何在小程序中引入vant weapp组件

    微信小程序没找到构建npm或者没找到node_modules目录解决方法如下: 按照微信小程序提供的文档npm install是不行的,直接提示没找到可构建的npm包. 1.直接安装:npm init ...