Trong một trong các ứng dụng web asp.net của tôi, tôi cần phải ẩn vị trí của tệp pdf đang được cung cấp cho người dùng.Đang cố gắng phát một tệp PDF với asp.net đang tạo một "tệp bị hỏng"
Vì vậy, tôi đang viết một phương thức truy xuất nội dung nhị phân từ vị trí của nó trên hệ thống CMS và sau đó xóa một mảng byte cho người dùng web.
Tôi nhận được, rất tiếc, đã xảy ra lỗi khi tải xuống luồng: "Không thể mở tệp vì nó bị hỏng" (hoặc điều gì đó tương tự như vậy, khi mở tệp trong trình đọc adobe).
Câu hỏi 1: Tôi đang làm gì sai? Câu hỏi 2: Tôi có thể tải xuống các tệp lớn bằng cách sử dụng phương pháp này không?
private void StreamFile(IItem documentItem)
{
//CMS vendor specific API
BinaryContent itemBinaryContent = documentItem.getBinaryContent();
//Plain old .NET
Stream fileStream = itemBinaryContent.getContentStream();
var len = itemBinaryContent.getContentLength();
SendStream(fileStream, len, itemBinaryContent.getContentType());
}
private void SendStream(Stream stream, int contentLen, string contentType)
{
Response.ClearContent();
Response.ContentType = contentType;
Response.AppendHeader("content-Disposition", string.Format("inline;filename=file.pdf"));
Response.AppendHeader("content-length", contentLen.ToString());
var bytes = new byte[contentLen];
stream.Read(bytes, 0, contentLen);
stream.Close();
Response.BinaryWrite(bytes);
Response.Flush();
}
Tại sao không sử dụng phương pháp Response.WriteFile? –
Tệp không thực sự tồn tại trong hệ thống tệp. – Pablo
Để rõ ràng hơn: tệp tồn tại trong cơ sở dữ liệu CMS. Đó là địa chỉ url, nhưng tôi không thể truy xuất tệp từ hệ thống tệp. – Pablo