我必须在夜间进程中创建一个CSV文件,并将这些文件作为http下载用于客户端。
我已经使用帮助PLSQL块创建了一个CSV:
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 :(得分: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
}
}
为用户提供一个链接并使用所需参数调用此servelet以从数据库中查找文件
你链接看起来像这样
http://serveraddress.com/DoanloadServlet?fileName=name_of_file
答案 1 :(得分:0)
我发现复制生成的文件Web服务器很容易。我们可以在网络服务器上使用SCP或FTP到生成的文件。 e.g。
scp /mnt/csv_dir/feed.csv root@server:/home/stackoverflow/www/csv
在夜间进程中添加此命令以运行
上面的命令会将feed.csv
从csv_dir移动到Web服务器的csv文件夹。
现在我们将能够使用网址访问该文件。