【问题标题】:Corrupted Files Microsoft Office 2007 ASP.NET 1.1 and SQL Server损坏的文件 Microsoft Office 2007 ASP.NET 1.1 和 SQL Server
【发布时间】:2011-10-24 10:36:47
【问题描述】:

我正在开发一个将文件存储在数据库中的 ASP.NET 1.1 网站。自 2001 年以来,该网站一直运行良好,上传和下载任何类型的文档都没有问题。

然而,最近客户注意到所有 Microsoft Office 2007 文档DOCXXLSX 等在任何用户尝试下载它们时都已损坏。

我注意到 SQL Server 向DocumentContent(图像列)添加了一个额外的字节。在上传文档之前,内容和长度都很好。但是,在它们被存储之后,SQL Server 会添加一个额外字节.... 为什么??????

互联网上的许多人提供了有关如何下载文件的解决方案,这很棒并且对我有用。

我正在寻找这个问题的答案...为什么 SQL SERVER 会在图像列中添加一个额外的字节?

它是一个 Asp.NET 1.1 和 SQL 2000,但我们刚刚将它移到 2008 年,我们仍然遇到同样的问题。

【问题讨论】:

  • @marc_s 如果该站点自 2001 年以来就真正在线,那么假设当时的技术水平也是合理的。如果它有效......
  • Michael,数据库是 SQL Server 2000,我们将它升级到 2008,但我们仍然遇到同样的问题。我现在打算尝试更改列类型,但我认为这不是正确的想法,因为该列在网站上的很多地方都使用了
  • 它是带有 VB.NET 的 ASP.net 1.1
  • 更改列类型应该是无痛的并且没有任何影响 - 只需使用 ALTER TABLE dbo.YourTable ALTER COLUMN YourColumn VARBINARY(MAX) (并首先在测试系统上测试它!!) - 不需要更改您的 ASP.NET 代码.. ...
  • 你能找出那个字节是什么吗?我的意思是什么价值? 0x00xFF 还是什么?

标签: asp.net sql-server sql-server-2008 sql-server-2000


【解决方案1】:

我不能 100% 确定您的问题是否与我的问题相同,但就我而言,我发现问题实际上出在 写作 部分,而不是在阅读部分。比如我原来的写代码是这样的:

Dim FILE_CONTENT(len) As Byte
File.InputStream.Read(FILE_CONTENT, 0, len)
SaveFileToDatabase(FILE_NAME, CONTENT_TYPE, FILE_CONTENT)

当我将第一行更改为以下内容时:

Dim FILE_CONTENT(0 To len - 1) As Byte 

读取错误消失了。我只是忘记了当您在未指定下限的情况下对其进行标注时,VB 实际上会默认分配 N+1 个字节(O 到 N)。请参阅此处描述的类似情况:Uploaded Docx Files are getting corrupted。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 2015-02-02
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多