For a project we are currently working on, we needed to generate, and send a Word 2010 document to the client. The document was generated by a great PL/SQL document generation tool called Doxxy, and was sent to the client using the wpg_docload package. This is a standard Oracle pl/sql package that can be used to download files, BLOBs and BFILEs.
Before the download, we set the Content-type in the http header as follows :
owa_util.mime_header('application/vnd.openxmlformats-officedocument.wordprocessingml.document',FALSE);
When sending the document to the client, we got the following popup in our browser :
So it looked like our browser didn’t recognized that this was an Word 2010 document.
Looking at the response header, using Firebug, we got the following result :
Somehow the content type for Word 2010 was overwritten to text/html; charset=utf-8.
So, time for the good old trial and error approach, which, after a while, paid off.
Before setting the response header to : owa_util.mime_header(‘….’,FALSE); we need to issue the following commands :
htp.flush(); htp.init();
Now the code looks like this :
-- first clear the header htp.flush; htp.init; -- set up HTTP header owa_util.mime_header('application/vnd.openxmlformats-officedocument.wordprocessingml.document', FALSE); -- set the size so the browser knows how much to download htp.p('Content-length: ' || DBMS_LOB.getlength(v_blob)); -- the filename will be used by the browser if the users does a save as htp.p('Content-Disposition:attachment; filename="'||nvl(v_filename,'export')||v_ext||'"'); -- Set COOKIE (for javascript download plugin) htp.p('Set-Cookie: fileDownload=true; path=/'); -- close the headers owa_util.http_header_close; -- download the BLOB wpg_docload.download_file(v_blob);
After adding these 2 lines, we got the correct mime type :
Many thanks to Willem Albert and Bjorn Fraeys for delivering the content for this blog !