1

One of our internal websites allows for users to upload documents and stores the files into the SQL 2008 database. The problem we are encountering is that docx are always saying the are corrupted when you try and open them. After you click OK, they then proceed to open fine. What I am doing wrong? (All other file types save fine, including .doc)

Upload code:

        // save the files
        string mimeType = Request.Files[i].ContentType;
        string filePath = Path.GetFileName(Request.Files[i].FileName);
        string fileName = Path.GetFileName(Request.Files[i].FileName);
        Stream fileStream = Request.Files[i].InputStream;
        long fileLength = Request.Files[i].InputStream.Length;

        if (fileLength > 0)
        {
            byte[] fileData = new byte[fileLength];
            fileStream.Read(fileData, 0, (int)fileLength);
            _fileRepo.SaveFileToDatabase(_currentUser.Username, t.EncounterId, fileName, filePath, mimeType, fileData);
        }

Code that inserts it into the database

        tblDocumentImage img = new tblDocumentImage();
        img.DocumentImage = file;       //DB field datatype = Image

...
...

        _ctx.tblDocumentImage.InsertOnSubmit(img);
        _ctx.SubmitChanges();

Code that serves the file back out

    public Document DocumentById(int docID)
    {
        Document doc = new Document(docID;
...


            var f = _ctx.tblDocumentImage.Where(di => di.DocumentID == docID).FirstOrDefault();
            doc.File = (byte[])f.DocumentImage.ToArray();

        return doc;
    }


    public ActionResult Download(int id, string filename)
    {
        Document doc = null;

        if (id != 0)
        {
            doc = _fileRepo.DocumentById(id);
        }

        if (doc != null)
        {
            return File(doc.File, doc.ContentType, doc.FilenameWithExtension); 
        }

        return File(new byte[0], "text/html");
    }
4

1 回答 1

0

试试这样:

int fileLength = Request.Files[i].ContentLength;

代替:

long fileLength = Request.Files[i].InputStream.Length;
于 2013-10-16T15:17:13.200 回答