<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>16.0.1</version>
<type>jar</type>
</dependency>
IO.java
package com.blogspot.na5cent.util;
import com.google.common.io.ByteStreams;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.FileNameMap;
import java.net.URLConnection;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author redcrow
*/
public class IO {
public static void download(HttpServletResponse response, InputStream inputStream, String fileName) throws IOException {
FileNameMap fileNameMap = URLConnection.getFileNameMap();
OutputStream outputStream = null;
try {
response.setContentType(fileNameMap.getContentTypeFor(fileName));
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.setHeader("language", "th-TH");
outputStream = response.getOutputStream();
ByteStreams.copy(inputStream, outputStream);
} catch (IOException ex) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
throw ex;
} finally {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
}
}
Example to useDownloadService.java
...
...
...
import com.blogspot.na5cent.util.IO;
/**
*
* @author redcorw
*/
@WebServlet(urlPatterns = "/downloadFile")
public class DownloadService extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
String path = request.getParameter("path");
final File file = new File(UploadUtils.getUploadTempDirectory(), path);
//use library
IO.download(response, new FileInputStream(file), file.getName());
}
}
Html
<a href="http://localhost:8080/test/downloadService?path=/folder/test_file.png"></a>
ถ้า type ที่ dowload มาไม่ตรงตาม file type นั้นๆ ให้เพิ่ม code ต่อไปนี้ลงไปใน web.xml ครับ เป็นการ map จาก extension file --> mime type file
<?xml version="1.0" encoding="UTF-8"?>
<web-app
...
...
..
<!-- MS Word -->
<mime-mapping>
<extension>doc</extension>
<mime-type>application/msword</mime-type>
</mime-mapping>
<mime-mapping>
<extension>dot</extension>
<mime-type>application/msword</mime-type>
</mime-mapping>
<mime-mapping>
<extension>docx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.document</mime-type>
</mime-mapping>
<mime-mapping>
<extension>dotx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.template</mime-type>
</mime-mapping>
<!-- MS Word -->
<!-- MS Excel -->
<mime-mapping>
<extension>xla</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xlc</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xlm</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xls</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xlt</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xlw</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xlsx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xltx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.template</mime-type>
</mime-mapping>
<!-- MS Excel -->
<!-- MS Powerpoint -->
<mime-mapping>
<extension>pot,</extension>
<mime-type>application/vnd.ms-powerpoint</mime-type>
</mime-mapping>
<mime-mapping>
<extension>pps</extension>
<mime-type>application/vnd.ms-powerpoint</mime-type>
</mime-mapping>
<mime-mapping>
<extension>ppt</extension>
<mime-type>application/vnd.ms-powerpoint</mime-type>
</mime-mapping>
<mime-mapping>
<extension>pptx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.presentationml.presentation</mime-type>
</mime-mapping>
<mime-mapping>
<extension>ppsx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.presentationml.slideshow</mime-type>
</mime-mapping>
<mime-mapping>
<extension>potx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.presentationml.template</mime-type>
</mime-mapping>
<!-- MS Powerpoint -->
<!-- MS Project -->
<mime-mapping>
<extension>mpp</extension>
<mime-type>application/vnd.ms-project</mime-type>
</mime-mapping>
<!-- MS Project -->
<!-- PDF -->
<mime-mapping>
<extension>pdf</extension>
<mime-type>application/pdf</mime-type>
</mime-mapping>
<!-- PDF -->
<!-- Zip -->
<mime-mapping>
<extension>zip</extension>
<mime-type>application/zip</mime-type>
</mime-mapping>
<!-- Zip -->
<!-- image -->
<mime-mapping>
<extension>jpe</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jpeg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jpg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
<mime-mapping>
<extension>ico</extension>
<mime-type>image/x-icon</mime-type>
</mime-mapping>
<mime-mapping>
<extension>gif</extension>
<mime-type>image/gif</mime-type>
</mime-mapping>
<mime-mapping>
<extension>png</extension>
<mime-type>image/png</mime-type>
</mime-mapping>
<!-- image -->
...
...
...
</web-app>


ไม่มีความคิดเห็น:
แสดงความคิดเห็น