2011-01-05 44 views
10

Về cơ bản tôi có một trang web hiển thị bản xem trước HTML của một số tài liệu (chủ yếu là văn phòng). Kết quả là mảnh HTML được bao gồm trong các trang được trả về bởi cùng một trang web, tuy nhiên hình ảnh được trả về bởi handler HTTP từ một trang web khác với các liên kết sau đây:Trình duyệt Chrome không hiển thị hình ảnh được tạo bởi trình xử lý HTTP

<img width="50" height="50" src="http://portal/Service/GetFile.asxh?id=123&inline=true"> 

Đối với một số lý do tất cả các trình duyệt trừ Chrome (ví dụ như IE6/7/8, Firefox, Opera, Safari) hiển thị mọi thứ tốt, tuy nhiên đối với những hình ảnh này Chrome hiển thị biểu tượng "hình ảnh bị hỏng". Nếu tôi chọn "Mở hình ảnh trong tab mới" thì hình ảnh được hiển thị tốt.

Chỉnh sửa Tôi nghĩ rằng tôi đã giải quyết vấn đề này, nhưng rõ ràng với Fiddler bật nó hoạt động tốt.

Tôi đã có ngữ cảnh.Response = "utf-8" còn lại trong mã, nhưng việc xóa nó không có sự khác biệt.

Headers:

HTTP/1.1 200 OK 
Date: Wed, 05 Jan 2011 14:26:57 GMT 
Server: Microsoft-IIS/6.0 
MicrosoftOfficeWebServer: 5.0_Pub 
X-Powered-By: ASP.NET 
X-AspNet-Version: 4.0.30319 
Transfer-Encoding: chunked 
Cache-Control: no-cache 
Pragma: no-cache 
Expires: -1 
Content-Type: image/jpeg 

Code:

    context.Response.ContentType = file.ContentType; 

        context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 

        byte[] buff = new byte[BuffSize]; 
        using (var stream = repository.GetFileContentsAsStream(file.ContentId)) 
        { 
         int bytesRead; 
         do 
         { 
          bytesRead = stream.Read(buff, 0, BuffSize); 
          if (bytesRead > 0) 
          { 
           context.Response.OutputStream.Write(buff, 0, bytesRead); 
          } 
         } while (bytesRead > 0); 
        } 

        context.Response.Flush(); 
        context.Response.Close(); 
+1

Trình xử lý của bạn có đặt đúng loại nội dung không? –

+1

tiêu đề nào mà trình xử lý của bạn gửi trong phản hồi? –

+0

Bạn có hoàn toàn tích cực dịch vụ của bạn đang tạo ra các tiêu đề chính xác? Tôi đã có vấn đề tương tự trước đây và nó hầu như luôn luôn là một vấn đề với các tiêu đề hoặc dòng, một số trình duyệt tha thứ cho một số điều mà những người khác không. Và tôi giả sử bạn có nghĩa là "ashx" và không "asxh" :) –

Trả lời

5

Tôi khá chắc chắn Chrome yêu cầu Chiều dài được thiết lập cho hình ảnh, vì vậy hãy thử thêm header Content-Length trả lời của bạn khi xử lý bức hình.

+0

Không, tôi có chính xác cùng một hệ thống và tôi không gửi chiều dài nội dung, hoặc vẫn hoạt động tốt. –

+0

Tôi cũng đọc hình ảnh từ cơ sở dữ liệu. Có lẽ trên đầu sẽ tăng thêm độ trễ khiến Chrome từ bỏ. Dù sao, việc thêm Content-Length đã khắc phục được sự cố này. – Arunas

2

Bạn nên thêm này:

Response.AddHeader("Content-Disposition", "inline;Filename=\"Picture.gif\""); 
Response.AddHeader("Content-Length", filesize.ToString()); 
4

Đó là context.Response.Close(); Chrome không thích nó. Loại bỏ dòng đó và tất cả sẽ tốt. Tôi đã chiến đấu với điều này trong nhiều tháng.

+0

Tôi nghĩ bạn đúng. Tôi đã có cùng một vấn đề với một trình xử lý phục vụ các tệp PDF chung. Nó biến mất sau khi loại bỏ các Đóng –

+0

Tương tự ở đây, cũng áp dụng tiêu đề Content-Length nhưng loại bỏ các Close() phương pháp cố định nó. – Daveloper

+0

Tôi gặp vấn đề và đây là giải pháp của tôi. Cảm ơn ! – bcolin

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