2010-03-25 36 views
12

Tôi đang làm việc trên một ứng dụng web và cần truyền các tệp khác nhau. Tôi có thể làm pdf, hình ảnh và tài liệu Office cũ hơn. Tuy nhiên, khi tôi cố gắng làm với các tài liệu năm 2007, nó sẽ bị hỏng. Đây là mã của tôi:Làm cách nào để bạn phát trực tuyến tệp Excel 2007 hoặc Word 2007 bằng asp.net và C#

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); 

Các lỗi mà tôi nhận được là:

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

PK 

Bất kỳ lời đề nghị?

Trả lời

16

Theo một tìm kiếm web Tóm lại, các loại kịch câm chính xác cho Word và Excel là:

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:

Các mẫu đơn giản sau đây làm việc cho tôi. Nó khác với của bạn ở chỗ nó sử dụng một trình xử lý chung thay vì một biểu mẫu web (mà là thích hợp hơn cho một cái gì đó như thế này anyway).

Để kiểm tra, hãy đảm bảo có tệp excel 2007 có tên Book1.xlsx trong thư mục cấp cao nhất của ứng dụng.

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); 
     } 
    } 

} 
+0

Đã thử điều này và nó tốt hơn một chút. Tôi ít nhất cũng nhận được hộp thoại mở/lưu/hủy. Tuy nhiên, nếu tôi nhấp vào mở trên một tập tin docx, tôi nhận được gì, nhưng một trang html trống. Nếu tôi nhấp vào lưu trên hộp thoại, lưu nó vào tập tin, sau đó mở nó, tôi nhấp qua một số thông báo lỗi và sau đó nhận được tập tin đúng. Đối với các tập tin xlsx, nếu tôi lưu sau đó mở, tôi nhận được điều tương tự như docx, tức là một vài thông báo lỗi sau đó nó sẽ mở ra. Tuy nhiên, nếu tôi nhấp vào mở trên tệp xlsx, tôi phải bấm qua một vài lỗi, sau đó excel mở ra, nhưng thay vì dữ liệu, tôi có trang đăng nhập của tôi – Kevin

+0

Tôi đã thêm mã mẫu hoạt động. –

+0

Điều đó đã xảy ra. Tại sao nó hoạt động như thế này và không phải là cách khác là vượt ra ngoài tôi, nhưng tôi quá bận rộn để chăm sóc vào lúc này. – Kevin

0

Đối với định dạng file csv mà chúng tôi muốn Excel được sử dụng để mở, chúng tôi đang sử dụng: Response.ContentType = "application/msexcel";

Có lẽ chúng ta nhận được ngay với điều này bởi vì nó không phải là một tập tin xls đúng, tuy nhiên.

5
.doc 


application/msword 

.dot 


application/msword 

.docx 


application/vnd.openxmlformats-officedocument.wordprocessingml.document 

.dotx 


application/vnd.openxmlformats-officedocument.wordprocessingml.template 

.docm 


application/vnd.ms-word.document.macroEnabled.12 

.dotm 


application/vnd.ms-word.template.macroEnabled.12 

.xls 


application/vnd.ms-excel 

.xlt 


application/vnd.ms-excel 

.xla 


application/vnd.ms-excel 

.xlsx 


application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 

.xltx 


application/vnd.openxmlformats-officedocument.spreadsheetml.template 

.xlsm 


application/vnd.ms-excel.sheet.macroEnabled.12 

.xltm 


application/vnd.ms-excel.template.macroEnabled.12 

.xlam 


application/vnd.ms-excel.addin.macroEnabled.12 

.xlsb 


application/vnd.ms-excel.sheet.binary.macroEnabled.12 

.ppt 


application/vnd.ms-powerpoint 

.pot 


application/vnd.ms-powerpoint 

.pps 


application/vnd.ms-powerpoint 

.ppa 


application/vnd.ms-powerpoint 

.pptx 


application/vnd.openxmlformats-officedocument.presentationml.presentation 

.potx 


application/vnd.openxmlformats-officedocument.presentationml.template 

.ppsx 


application/vnd.openxmlformats-officedocument.presentationml.slideshow 

.ppam 


application/vnd.ms-powerpoint.addin.macroEnabled.12 

.pptm 


application/vnd.ms-powerpoint.presentation.macroEnabled.12 

.potm 


application/vnd.ms-powerpoint.presentation.macroEnabled.12 

.ppsm 


application/vnd.ms-powerpoint.slideshow.macroEnabled.12 
+0

Thật tuyệt vời nếu bạn có thể thêm (các) nguồn của mình? ví dụ. [từ wikipedia] (http://en.wikipedia.org/wiki/Internet_media_type) –

Các vấn đề liên quan