asp.net输出docx文档出现【文件已损坏 无法打开】问题的解决方案

本文介绍了一种在将docx格式文件以字节流形式存储到数据库后出现文件损坏问题的解决方案。通过记录文件实际大小并在输出时使用该大小,避免了因字节流长度不匹配导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在某个项目中,有个需求需要将一些附件文档以字节流的形式直接存储在数据库中。

功能实现后,尝试过很多格式文件的上传下载处理,均未发现问题,

唯独在下载docx格式文件后,一打开文件就提示: “无法打开文件***, 因为内容有错误”  --- 文件已损坏,无法打开。

经过仔细比较后,发现将数据库中查找数据集获取的字节流信息直接赋值到byte数组时,数组的长度比实际文件的数据长度多了1个字节!

因此解决方案就是,在上传文件时,将文件的大小存储在数据库中;

输出文件时,以数据库中存储的大小为准,将二进制流输出成实际的文件格式。

经测试,可以解决此缺陷。

                Dim by As Byte() = dt.Rows(0)("fileContent")

                HttpContext.Current.Response.ClearContent()

                Dim sFileName As String = HttpUtility.UrlEncode(System.Text.UTF8Encoding.UTF8.GetBytes(dt.Rows(0)("fileName")))
                Dim sExtension As String = pf.GetFileNameSuffix(sFileName)

                HttpContext.Current.Response.ContentType = "application/octet-stream"
                HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + sFileName)

                '字节流读取处理,取数据库中存储的实际文件流长度
                '直接读取字节流数组长度(by.Length )将比实际文件长度多1个字节,对于docx格式文档会造成文件损坏的错误。
                HttpContext.Current.Response.AddHeader("Content-Length", dt.Rows(0)("fileSize").ToString())
                HttpContext.Current.Response.BinaryWrite(by)
                HttpContext.Current.Response.End()

  

 

转载于:https://www.cnblogs.com/icycore/p/3253400.html

任务中心 当前任务列表,单击可以进入任务中心 公司公告 显示公告列表,没有阅读的公告,加大加粗,显示颜色,点开后,失去未读特征 本日签到和签退 显示本日登录时间和本日最后在系统的时间 本日任务进度 饼状图 在建项目总进度 多行日期折现图模式 提醒便签 个人随时记录的提醒功能 汇总模式:单独一个首页,数据为上述功能的汇总和统计 文件与共享 文件区 可以上传和下载文件,记录文件名称,时间,关联项目,关联类别等信息。可以搜索。文件根据对应扩展名不同,显示不同图标,自己上传的文件可以修改类别,名称,描述等新奇。 文件单击可以下载。 文件分为共享区和私有区,分为左右结构,单击图标,有动画过渡,可以显示共享或者私有区域。 项目管理 项目立项 记录项目的名称,建立时间,完结时间,状态,基本描述,备注等信息 项目分析 为项目配置,大的模块,小的模块,功能点和对应的描述信息。可以导出本文档对应的格式 docx(不包括图片)。 报价模式 可以配置需求工时和单价,可以配置公式自动生成,也可以手动填写。 项目分配和计划 根据项目和人员进行分配和排期,每个单元格可以单选和多选分配给人员任务。可以导出对应xlsx格式 分配的任务进入任务中心 项目进度 展示和下载两种文档模式的进度 任务中心 任务清单 任务分为周计划和指派任务 所有人可以申请任务,默认的责任人为申请人。 任务包括名称,内容,开始时间,结束时间,任务关联项目,任务类型,申请人,附件等信息 可以设置任务进入初审状态并提交,该任务将由管理员指派人员进入任务测试阶段。 任务可以由执行人设置百分比进度。 测试人完成测试任务后,提交状态为终审。管理员可以将状态设置完成或者驳回。 驳回(定义为缺陷)后,任务人将再次完善任务。提交审核流程。 每一个流程均记录在任务的详细流程中,每个流程,均需要添加备注 根据流程和状态生成流程图。 任务申请后,不可修改,默认为待审核状态,管理员可以修改并分配给对应人员。 管理员额外可以查看到完成任务的实际时间和设置工时(数字类型) 当前任务 按照人员列举,当前所有人员任务列表,鼠标点击显示完整任务信息 任务统计 按照人员项目时间段筛选 统计人员完成任务信息以及工时统计和实际耗时统计 显示并可导出 工时报表 需求报表 缺陷报表 系统配置 管理员管理 可以设定管理员的账号密码以及角色信息 部门管理 可以设定公司的部门信息 角色管理 设定不同的角色名称,用来区分权限功能 角色权限配置 为不同的角色配置不同权限 系统字典类型数据配置 用来配置系统中所有使用的字典数据类型参数,例如事件的处理状态,该功能内置。 出勤管理 可以设定上班下班和加班下班时间点 可以进行搜索,包括普通模式和汇总模式 普通模式:显示各个帐号每天的在线时长明细,如果该天出现多次不同IP,记录不同IP,并标记异常。 汇总模式:显示各个帐号统计的在线时长和出勤天数 单击名字可以按照月度查看出勤情况,并可以在日历上显示和标注,事假和病假调休等事件。 通讯录 记录公司人员相关电话,微信号,应急联系人名字和电话,以及其他相关通讯信息例如物业,水电。 公告系统 新闻类型,可以发布和审核公告信息,显示已经阅读列表 公司制度 新闻类型,可以发布和修改信息,制度带有编号 操作规范 新闻类型,可以发布和修改信息,带有编号 物资系统 物资包括虚拟和真实,每一个物资对应唯一编号,例如一次引进4把椅子,4把椅子各自有自己的编号。 物资的状态可以扩展,包括不限制于,购买,在用,损坏,支出。 物资的购买,需要可以按照时间段统计,总金额,和各状态分类统计 物资的在用和支出,物资可以分配给员工,项目,公司来实现在用状态。 系统参数 系统基本参数配置,配置系统内常用参数,应为可能发生变化的参数点。 系统日志 记录人员和系统操作的历史 使用net6以上,EF+webApi+vue+ele前后端 帮我写个全部的
最新发布
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值