2010-08-31 38 views
8

Vì vậy, tôi biết đã có một số similar bài viết, nhưng tôi nghĩ rằng đây là đủ của một sự thay đổi để đảm bảo vấn đề riêng của mình:PHP File Download sử dụng dữ liệu POST qua jQuery AJAX

Tôi đang xây dựng một nhà xuất khẩu XLS trong PHP và jQuery. Tôi đang cố gắng để POST một mảng với jQuery (mà tôi tin rằng sẽ là quá dài như một chuỗi truy vấn GET), và sử dụng nó để tạo ra một tập tin XLS trên máy chủ của tôi, mà người dùng sau đó có thể tải về.

Tôi đã sử dụng iframe ẩn trong quá khứ để thực hiện điều này, nhưng vì chúng chỉ chuyển hướng tới url, điều này yêu cầu tôi sử dụng GET, điều này khiến tôi lo lắng.

Câu hỏi của tôi là: làm cách nào để lưu trữ các tệp đó trên máy chủ của tôi và liên kết với chúng nếu chúng được tạo động, có thể bởi nhiều người dùng? Liệu một liên kết khung nội tuyến ẩn có phải là một tập lệnh PHP riêng biệt có định vị tệp THEIR dựa trên ID phiên hoặc một thứ gì đó tương tự không?

Cảm ơn trước cho bất kỳ hướng dẫn ở đây trên những gì tôi đang chắc chắn được hỏi tất cả các thời gian :)

Trả lời

9

Có thể POST lên iframe ẩn. Do đó, bạn không cần phải lo lắng về độ dài của chuỗi truy vấn; bạn sẽ đăng các cặp khóa/giá trị sẽ tạo tệp XLS của bạn và sau đó buộc tải tệp xuống trình duyệt.

<form method="post" action="/download/xls" target="download_xls"> 
    <fieldset> 
    <label>Key 1:</label> 
    <input type="text" name="key_1" /> 
    </fieldset> 

    <fieldset> 
    <label>Key 2:</label> 
    <input type="text" name="key_2" /> 
    </fieldset> 

    <fieldset> 
      <input type="submit" value="Submit" /> 
    </fieldset> 
</form> 

<iframe id="download_xls" name="download_xls" width="0" height="0" scrolling="no" frameborder="0"></iframe> 

CẬP NHẬT Một tìm kiếm nhanh Google bật lên bài viết này: http://particletree.com/notebook/ajax-file-download-or-not/

Về cơ bản, gợi ý là phải POST hình thức của mình vào trang hiện tại và đáp ứng với một tập tin tải về. Phương án này có thể đủ tốt cho bạn.

+0

Ý tưởng rất hay, nhưng thật không may, thuộc tính mục tiêu không được chấp nhận trong các phần tử biểu mẫu, vì vậy tôi không biết liệu đó có phải là giải pháp an toàn hay không. – Trafalmadorian

+0

Hấp dẫn. Tôi sẽ thử nó ngay bây giờ ... nếu nó hoạt động, tôi sẽ chấp nhận câu trả lời của bạn :) – Trafalmadorian

+0

Bạn là chính xác. Nó không được chấp nhận trong HTML 4.1 và XHTML 1.0. Tuy nhiên, nó hợp lệ trong XHTML 1.0 Transitional, và nó vẫn được hỗ trợ bởi hầu hết các trình duyệt chính. http://www.w3schools.com/TAGS/att_form_target.asp – simeonwillbanks

5

Điều này có vẻ như nó nên được khá đơn giản, nhưng tất cả phụ thuộc vào nơi bạn đang đặt những file XLS bạn đang tạo ra. Nếu bạn dự định rằng phản hồi đối với bài đăng phải là hộp thoại "Lưu tệp" — tức là, tệp đó tự — thì tất cả những gì bạn phải làm là đảm bảo tiêu đề "Nội dung bố trí" được đặt thành "tệp đính kèm ", và sau đó dòng ra các nội dung tập tin.

Nếu bạn định tạo tệp và giữ nó, bạn sẽ phải lưu trữ nó ở đâu đó với số nhận dạng. Trong trường hợp đó, bạn chỉ cần trả lời bằng một trang thông thường có liên kết "tải xuống", sao cho liên kết đó bao gồm số nhận dạng tệp. Điều đó có thể kích hoạt GET hoặc POST và máy chủ sẽ trả lời rằng khá nhiều như tôi đã mô tả ở trên.

Ẩn không thực sự hiểu được điều này, theo ý kiến ​​của tôi.

+0

Cảm ơn bạn rất nhiều vì đã trả lời. Lý tưởng nhất là tôi sẽ không giữ chúng xung quanh và chỉ liên kết người dùng với hộp thoại "Lưu tệp". Tuy nhiên, nếu tôi làm điều đó, trước tiên tôi phải POST dữ liệu từ máy khách của họ và tạo tệp TỪ dữ liệu đó và liên kết lại với nó ... có vẻ như nó sẽ buộc tôi giữ nó trên máy chủ khi nó được được tạo. Logic tròn, tôi biết :) – Trafalmadorian

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