关于下载文件已损坏,要修复

时间:2018-10-01 02:57:19

标签: c# asp.net

当我下载任何文件时,在下载文件上打开文件已损坏,想要修复时显示错误,但是下载pdf时不会出现此问题。

我检查了服务器并正确存储了文件,我尝试使用复制/粘贴将其从服务器直接复制到我的机器,并且文件以这种方式工作,但是当我下载它(除PDF文件之外)时,该文件不起作用。

 <asp:FileUpload ID="fileUpload" runat="server" CssClass="btn btn-success" />
                    <asp:RegularExpressionValidator ID="revFileUpload" runat="server" ControlToValidate="fileUpload"
                        Display="Dynamic" ErrorMessage="Valid file type pdf/docx/xls/xlsx/txt/ppt/pptx." ValidationExpression="^.*\.(PDF|pdf|DOCX|docx|XLS|xls|XLSX|xlsx|TXT|txt|ppt|PPT|pptx|PPTX|ppsx|PPSX|pptm|PPTM)$"
                        CssClass="failureNotification">InValid file type (only pdf/docx/xls/xlsx/txt/ppt/pptx formats accepted)</asp:RegularExpressionValidator>
                    <asp:RequiredFieldValidator ID="rfFileUpload" runat="server" ControlToValidate="fileUpload"
                        CssClass="failureNotification" Display="Dynamic" ErrorMessage="Upload document is required">Upload document is required</asp:RequiredFieldValidator>

c#代码

 string filePath = (sender as LinkButton).CommandArgument;
 Response.ContentType = ContentType;
 Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));
 Response.WriteFile(filePath);
 Response.End();

1 个答案:

答案 0 :(得分:0)

将二进制文件传输为文本ContentType会引起您的问题。理想情况下,您的响应类型应与发送的实际文件类型匹配。否则,接收数据的代码将不知道如何正确处理它。至少您需要使用通用二进制类型application/octet-stream

此外,并非所有pdf文件都可以使用。 PDF文件使用ASCII编码,但可以包含二进制数据,当以文本格式传输时会损坏。