Как Вы передаете потоком Excel 2007 или файл Word 2007 с помощью asp.net и c#

Я работаю над веб-приложением и потребностью передать различные файлы потоком. Я могу сделать pdfs, изображения и более старые документы Office. Однако, когда я пытаюсь сделать с документами 2007 года, это повреждается. Вот мой код:

    Response.Buffer = true;
    Response.Clear();
    Response.ClearContent();
    Response.ClearHeaders();
    switch (FileExtension.ToLower())
    {
        case "pdf":
            Response.ContentType = "application/pdf";
            break;
        case "doc":
            Response.ContentType = "application/msword";
            break;
        case "docx":
            Response.ContentType = "application/vnd.ms-word.document.12";
            break;
        case "xls":
            Response.ContentType = "application/vnd.ms-excel";
            break;
        case "xlsx":
            Response.ContentType = "application/vnd.ms-excel.12";
            break;
        default:
            Response.ContentType = "image/jpeg";
            break;
    }
    Response.BinaryWrite(buffer);

Ошибка, которую я получаю:

An invalid character was found in text content. Error processing resource 'http://DomainName/GetFile.aspx...

PK

Какие-либо предложения?

13
задан Todd Main 31 July 2010 в 17:53
поделиться

2 ответа

Согласно краткому поиску в Интернете, правильные типы пантомимы для word и excel:

application/vnd.openxmlformats-officedocument.wordprocessingml.document
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

http://www.bram.us/2007/ 05/25 / office-2007-mime-types-for-iis /

Edit:

Следующий упрощенный пример мне подходит. Он отличается от вашего тем, что использует общий обработчик вместо веб-формы (что в любом случае больше подходит для чего-то вроде этого).

Чтобы проверить это, убедитесь, что в папке верхнего уровня приложения есть файл Excel 2007 с именем Book1.xlsx.

DownloadSpreadsheet.ashx:

<%@ WebHandler Language="C#" Class="DownloadSpreadsheetHandler" %>

using System;
using System.Web;
using System.IO;

public class DownloadSpreadsheetHandler: IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        string path = context.Server.MapPath("~/Book1.xlsx");
        using (FileStream spreadsheet = File.OpenRead(path))
        {
            CopyStream(spreadsheet, context.Response.OutputStream);
        }
    }

    public bool IsReusable {
        get {
            return false;
        }
    }

    private static void CopyStream(Stream input, Stream output)
    {
        byte[] buffer = new byte[32768];
        while (true)
        {
            int read = input.Read(buffer, 0, buffer.Length);
            if (read <= 0)
                return;
            output.Write(buffer, 0, read);
        }
    }

}
16
ответ дан 1 December 2019 в 22:38
поделиться

Для файлов формата CSV, для открытия которые мы хотим использовать Excel, мы используем: Response.ContentType = "application/msexcel";

Возможно, нам это сойзет с рук, потому что это не настоящий xls-файл.

0
ответ дан 1 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: