2014-01-06 53 views
0

我必須在每晚的過程中創建一個CSV文件並將這些文件作爲http下載使用到客戶端。獲取一個csv文件作爲http下載

我創建了一個CSV的幫助PLSQL塊爲:

DECLARE 
    F UTL_FILE.FILE_TYPE; 
    CURSOR C1 IS SELECT emp_id, name FROM employee; 
    C1_R C1%ROWTYPE; 
BEGIN 
    F := UTL_FILE.FOPEN('EXPORT_DIR','employee.csv','w',32767); 
    FOR C1_R IN C1 
    LOOP 
     UTL_FILE.PUT(F,C1_R.emp_id); 
     UTL_FILE.PUT(F,','||C1_R.name); 
     UTL_FILE.NEW_LINE(F); 
    END LOOP; 
    UTL_FILE.FCLOSE(F); 
END; 
/

這將創建在數據庫服務器上的CSV文件「employee.csv」。現在我必須將這個文件作爲HTTP可下載文件提供給客戶端。怎麼做 ?

+0

你的文件存儲在哪裏? –

+0

否,它在服務器端,以特定名稱存儲在磁盤上。 –

+0

好..比傳遞文件路徑下面的例子。這會提示用戶保存或打開文件。 –

回答

0

我發現它容易複製生成的文件的Web服務器。我們可以將SCP或FTP用於Web服務器上生成的文件。例如

scp /mnt/csv_dir/feed.csv [email protected]:/home/stackoverflow/www/csv 

在夜間處理過程添加此命令運行 上面的命令將在feed.csv從csv_dir轉移到Web服務器的CSV文件夾。

現在我們將能夠使用網址訪問該文件。

1

您可以提供一個Servlet以csv格式下載文件。

DoanloadServlet.java:

public void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException {  

try{ 
    //set content type to csv and response as attachment  
    response.setHeader("Content-Type", "text/csv"); 
    response.setHeader("Content-Disposition", "attachment; filename=Myfile.csv"); 
    OutputStream out = response.getOutputStream(); 

    //read your file from database in outputstream 
    FileInputStream in = new FileInputStream(my_file); 
    byte[] buffer = new byte[4096]; 
    int length; 
    while ((length = in.read(buffer)) > 0){ 
      out.write(buffer, 0, length); 
    } 
    in.close(); 
    out.flush(); 
    } 
    catch(Exception e) 
    { 
    //Exception handling 
    } 

} 

給用戶一個鏈接,稱這個小服務程序與所需的參數從數據庫中找到文件。
你鏈接看起來像這樣
http://serveraddress.com/DoanloadServlet?fileName=name_of_file