Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 上载docx会损坏文件_C#_Asp.net - Fatal编程技术网

C# 上载docx会损坏文件

C# 上载docx会损坏文件,c#,asp.net,C#,Asp.net,我正在使用下面的代码上传一个文件。文件上传没有错误,但当我打开扩展名为.docx的文件时,M$表示文件已损坏。但是,它可以修复文件,然后打开。我想修复此问题,以便正确打开文档 string strExtension = Path.GetExtension(context.Request.Files[0].FileName).ToLower(); string fileName = @"C:\" + Guid.NewGuid().ToString() + strExtension; using (

我正在使用下面的代码上传一个文件。文件上传没有错误,但当我打开扩展名为.docx的文件时,M$表示文件已损坏。但是,它可以修复文件,然后打开。我想修复此问题,以便正确打开文档

string strExtension = Path.GetExtension(context.Request.Files[0].FileName).ToLower();
string fileName = @"C:\" + Guid.NewGuid().ToString() + strExtension;
using (FileStream fs = new FileStream(fileName, FileMode.CreateNew))
{
    byte[] bytes = new byte[16 * 1024];

    int bytesRead;
    while ((bytesRead = context.Request.InputStream.Read(bytes, 0, bytes.Length)) > 0)
    {
        fs.Write(bytes, 0, bytesRead);
    }
} 
谢谢

编辑:

使用以下代码正确保存文件:

while ((bytesRead = context.Request.Files[0].InputStream.Read(bytes, 0, bytes.Length)) > 0)

还可以使用context.Request.Files[0]正确保存。另存为

看起来您正在阅读。最好的办法是检查收藏

或者更简单,使用服务器控件


您的代码正在将原始输入(很可能是多部分输入)复制到一个文件中。

看起来您正在读取。最好的办法是检查收藏

或者更简单,使用服务器控件


您的代码正在将原始输入(很可能是多部分输入)复制到文件中。

这并不能准确回答您的问题,但您可以使用将内容保存到所需路径

string strExtension = Path.GetExtension(context.Request.Files[0].FileName).ToLower();
string fileName = @"C:\" + Guid.NewGuid().ToString() + strExtension;
context.Request.Files[0].SaveAs(fileName); // i'll ignore the violation of the law of demeter ;)

这并不能准确回答您的问题,但您可以使用将内容保存到所需路径

string strExtension = Path.GetExtension(context.Request.Files[0].FileName).ToLower();
string fileName = @"C:\" + Guid.NewGuid().ToString() + strExtension;
context.Request.Files[0].SaveAs(fileName); // i'll ignore the violation of the law of demeter ;)

有没有理由让我使用SaveAs将其与流一起过度保存?如果您需要完成的工作已经编写、测试并为您工作,那么没有理由重新发明轮子。这就是像这样的简单错误被引入你的应用程序的方式。我同意,我将删除流逻辑。谢谢。有什么理由我应该使用SaveAs而不是用流来保存它吗?如果你需要做的已经编写、测试并为你工作了,没有理由重新发明轮子。这就是像这样的简单错误被引入你的应用程序的方式。我同意,我将删除流逻辑。谢谢。当我切换到文件[0].InputStream时,文件会正确保存和打开。是的,这不仅是一件“更好”的事情,而且是正确的事情。原始Http输入流(其中包含Http有效负载)与多部分传输的文件(仅为整个输入流的一部分)之间存在差异。您当然可以获取原始输入流并解析/提取您自己看到的内容,但正如dana所提到的,请求中的.Files属性可以为您实现这一点。当我切换到文件[0].InputStream时,文件会正确保存和打开。是的,这不仅是一件“更好”的事情,而且是正确的事情。原始Http输入流(其中包含Http有效负载)与多部分传输的文件(仅为整个输入流的一部分)之间存在差异。您当然可以获取原始输入流并解析/提取您自己看到的内容,但正如dana所提到的,请求中的.Files属性可以为您完成这项工作。