Tôi muốn tạo tệp văn bản để xuất/tải xuống, như * .csv, từ một ứng dụng ASP.NET. Tôi biết về Response.TransmitFile, nhưng tôi muốn làm điều này mà không cần tạo và lưu tệp trên máy chủ. Điều đó có thể không? Có ai đã làm điều gì đó như thế không?Trong ASP.NET, làm cách nào để trình duyệt tải xuống nội dung chuỗi thành một tệp? (C#)
Trả lời
Tệp bạn chưa lưu chỉ là biến chuỗi hoặc MemoryStream. Nhưng đối với một lượng lớn dữ liệu bạn có thể không muốn giữ tất cả trong bộ nhớ. Bạn muốn làm gì với "tệp" này sau khi đã có?
Tôi muốn tải xuống số –
Khi bạn nói "Tạo tệp để xuất", tôi hiểu rằng bạn muốn làm cho tệp có thể tải xuống trình duyệt. Nếu đúng như vậy, đây là một ví dụ.
public void btnGo_Click (Object sender, EventArgs e)
{
Response.Clear();
string fileName= String.Format("data-{0}.csv", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "filename=" + fileName);
// write string data to Response.OutputStream here
Response.Write("aaa,bbb,ccc\n");
Response.End();
}
trích dẫn: RFC 4180
Tôi cho rằng bạn có ý định rằng điều này được đặt trong một trang ASPX bình thường? Điều đó sẽ làm việc, tất nhiên, nhưng không thực sự tối ưu. Sẽ có một số chi phí cho việc khởi tạo/bắt đầu để tạo trang ASPX khi bắt đầu. – Noldorin
có, điều này sẽ đi vào một trang "bình thường" ASPX. Bạn không chắc chắn những gì bạn có nghĩa là bằng cách trên không, hoặc lý do tại sao những gì tôi có ở đây là phụ tối ưu. – Cheeso
Vâng, một ASHX sẽ làm tốt công việc. Tôi đã đề xuất một trình xử lý HTTP tùy chỉnh, nhưng có thể hoạt động tốt ở đây. – Noldorin
Bạn có thể viết direcly đến Response.OutputStream và thiết lập các kiểu nội dung đúng, và tiêu đề bố trí nội dung.
Ồ, điều đó không tệ. Trong trang Page_Load của ASPX của bạn thực hiện điều này:
Response.ContentType = "text/xml";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Write(/* your text goes here */);
Ở trên là ví dụ nếu tệp 'của bạn' là xml, nhưng có thể là bất kỳ thứ gì, từ và xuất ra tệp pdf. Tất cả những gì bạn phải làm là cập nhật ContentType mà bạn có thể tra cứu qua Google hoặc Trực tiếp.
wow bạn mọi người đang nhanh chóng ... =) – JasonRShaver
Hãy thử mẫu này:
protected void Button1_Click(object sender, EventArgs e)
{
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "attachment; filename=download.csv");
Response.Write("your,csv,file,contents");
Response.End();
}
Bạn sẽ muốn nhìn vào viết một Tuỳ chỉnh HTTP Handler (một lớp mà thực hiện IHttpHandler
) và chỉ cần đăng ký nó trong web.config. Xem this article on MSDN để có ví dụ điển hình về cách thiết lập.
Dưới đây là ví dụ cơ bản về cách bạn có thể thực hiện một cách để trả lại đánh dấu cho một số dữ liệu CSV.
using System.Web;
public class MyCsvDocumentHandler : IHttpHandler
{
public static string Data
{
get;
set;
}
public MyCsvDocumentHandler()
{
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/csv"; // Set the MIME type.
context.Response.Write(Data); // Write the CSV data to the respone stream.
}
public bool IsReusable
{
// To enable pooling, return true here.
// This keeps the handler in memory.
get { return false; }
}
}
Phương án này có thể đơn giản hơn một chút là sử dụng trang ASHX handler. Mã sẽ gần như giống hệt nhau.
Lưu ý rằng nó cũng có thể (nếu không có tài liệu) để liên kết một IHTTPHandler mà không cần nhấn mạnh trang web của bạn.config - loại trang "ASHX" cung cấp hệ thống dây điện cho bạn. –
(Tôi đã sử dụng kỹ thuật này để tạo các nút đồ họa động trong quá khứ, tôi nghĩ nó khá hữu ích). –
@Tetsujin: Vâng, tuyệt đối. Trong một số trường hợp, trình xử lý HTTP (IHttpHandler) là hấp dẫn hơn, vì nó cung cấp sự linh hoạt hơn một chút, nhưng một ASHX sẽ tốt như thế trong trường hợp này. – Noldorin
- 1. loại nội dung dạng văn bản đơn giản làm cho trình duyệt tải xuống tệp
- 2. Làm thế nào để trình duyệt web tải xuống tệp được lưu trữ trong chuỗi JavaScript?
- 3. đặt loại nội dung trong java để tải xuống tệp
- 4. Làm cách nào để bạn có thể buộc trình duyệt tải xuống tệp xml?
- 5. Làm cách nào để tải xuống tệp zip trong C#?
- 6. Làm cách nào để hiển thị tên tệp không phải ascii trong hộp tải xuống tệp trong trình duyệt?
- 7. HTTP "Nội dung-Bố trí: tệp đính kèm" và tải xuống tệp trên trình duyệt web iOS
- 8. Cách sử dụng Bố cục nội dung để buộc tệp tải xuống ổ cứng?
- 9. Làm thế nào để gửi tệp đến trình duyệt để tải xuống?
- 10. ASP.Net Tải tập tin xuống trình duyệt của khách hàng
- 11. Tải xuống ASP.Net
- 12. cách tải nội dung html url vào chuỗi trong java
- 13. Perl CGI để tải xuống tệp qua trình duyệt web
- 14. Làm cách nào để tải nội dung tải xuống với PLINQ?
- 15. Làm cách nào để tải xuống tệp bằng VBA (Không có trình duyệt internet)
- 16. Buộc trình duyệt tải xuống tệp thay vì mở tệp
- 17. Tránh các vấn đề về loại nội dung khi tải xuống tệp qua trình duyệt trên Android
- 18. Làm cách nào để tải tệp xuống chuỗi có gọi lại tiến trình?
- 19. Tải xuống tệp, mở tab mới trong trình duyệt
- 20. Làm cách nào để viết nội dung vào một cửa sổ trình duyệt khác bằng Javascript?
- 21. Trình duyệt web WPF - tải xuống HTML?
- 22. tệp được phân phát theo nội dung: nội tuyến vẫn đôi khi nhắc tải xuống
- 23. Lời nhắc tải xuống tệp trình duyệt bằng JavaScript
- 24. Tôi làm cách nào để trình bày tệp để tải xuống từ bộ điều khiển MVC?
- 25. Loại nội dung nào cần tải xuống bất kỳ định dạng tệp nào trong jsp?
- 26. Loại nội dung nào thực thi javascript trong trình duyệt?
- 27. php - Làm cách nào để tải xuống tệp?
- 28. Trình tải xuống CommonJS cho trình duyệt?
- 29. Làm cách nào để cho phép người dùng duyệt nội dung HTML/WebSite mà không cần khởi chạy trình duyệt (cần một trình duyệt nội tuyến)?
- 30. Làm cách nào để ngăn trình duyệt nhớ nội dung của trường văn bản?
bạn có thể cụ thể hơn một chút không? Bạn có nghĩa là bạn muốn lấy một chuỗi và lưu nó vào một tập tin trên máy khách và không bao giờ tạo một tập tin trên máy chủ? –