package org.argeo.eclipse.ui.specific;
import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
-//import org.argeo.eclipse.ui.dialogs.Error;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoException;
+import org.eclipse.rwt.RWT;
public class FileHandler {
+ private static Log log = LogFactory.getLog(FileHandler.class);
+
public FileHandler() {
}
public void openFile(String fileName, InputStream is) {
- // org.argeo.eclipse.ui.dialogs.Error.show("In Open File for RAP.");
+
+ // // Which file to download?
+ // String fileName = RWT.getRequest().getParameter( "filename" );
+ // // Get the file content
+ // byte[] download = MyDataStore.getByteArrayData( fileName );
+ // // Send the file in the response
+ // HttpServletResponse response = RWT.getResponse();
+ // response.setContentType( "application/octet-stream" );
+ // response.setContentLength( download.length );
+ // String contentDisposition = "attachment; filename=\"" + fileName +
+ // "\"";
+ // response.setHeader( "Content-Disposition", contentDisposition );
+ // try {
+ // response.getOutputStream().write( download );
+ // } catch( IOException e1 ) {
+ // e1.printStackTrace();
+ // }
+ //
+ //
+
+ try {
+
+ // / workaround : create a tmp file.
+ String prefix = "", suffix = "";
+ if (fileName != null) {
+ int ind = fileName.lastIndexOf('.');
+ if (ind > 0) {
+ prefix = fileName.substring(0, ind);
+ suffix = fileName.substring(ind);
+ }
+ }
+
+ File tmpFile = createTmpFile(prefix, suffix, is);
+
+ // Send the file in the response
+ HttpServletResponse response = RWT.getResponse();
+ byte[] ba = null;
+ ba = FileUtils.readFileToByteArray(tmpFile);
+
+ response.setContentLength(ba.length);
+
+ // String contentDisposition = "attachment; filename=\"" + fileName
+ // + "\"";
+ String contentDisposition = "attachment; filename=\"" + fileName
+ + "\"";
+ response.setContentType("application/force-download");
+ response.setHeader("Content-Disposition", contentDisposition);
+ response.setHeader("Content-Transfer-Encoding", "binary");
+ response.setHeader("Pragma", "no-cache");
+ response.setHeader("Cache-Control", "no-cache, must-revalidate");
+
+ // must-revalidate");
+
+ if (log.isDebugEnabled()) {
+ log.debug("Header Set ");
+ }
+
+ // header("Content-Type: application/force-download; name=\"".$localName."\"");
+ // 852 header("Content-Transfer-Encoding: binary");
+ // 853 if($gzip){
+ // 854 header("Content-Encoding: gzip");
+ // 855 // If gzip, recompute data size!
+ // 856 $gzippedData =
+ // ($data?gzencode($filePathOrData,9):gzencode(file_get_contents($filePathOrData),
+ // 9));
+ // 857 $size = strlen($gzippedData);
+ // 858 }
+ // 859 header("Content-Length: ".$size);
+ // 860 if ($isFile && ($size != 0)) header("Content-Range: bytes 0-"
+ // . ($size - 1) . "/" . $size . ";");
+ // 861
+ // header("Content-Disposition: attachment; filename=\"".$localName."\"");
+ // 862 header("Expires: 0");
+ // 863 header("Cache-Control: no-cache, must-revalidate");
+ // 864 header("Pragma: no-cache");
+
+ // IOUtils.copy(is, response.getOutputStream());
+ response.getOutputStream().write(ba);
+ // Error.show("In Open File for RAP.");
+ } catch (IOException ioe) {
+
+ throw new ArgeoException("Cannot copy input stream from file "
+ + fileName + " to HttpServletResponse", ioe);
+ }
+
}
private File createTmpFile(String prefix, String suffix, InputStream is) {
File tmpFile = null;
+ OutputStream os = null;
+ try {
+ tmpFile = File.createTempFile(prefix, suffix);
+ os = new FileOutputStream(tmpFile);
+ IOUtils.copy(is, os);
+ } catch (IOException e) {
+ throw new ArgeoException("Cannot open file " + prefix + "."
+ + suffix, e);
+ } finally {
+ IOUtils.closeQuietly(os);
+ }
return tmpFile;
}