項目中有這個需求:
1)上傳文件通過公司平台的校驗,校驗成功后,通過接口,返回文件流;
2)我們根據這個文件流進行操作。這里,先將文件流復制文件到項目臨時目錄WEB-INF/temp;文件使用完畢,刪除之;
下面是模擬代碼:
FileUtil.java:
package com.java.file; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; /** * File工具類 * @author CY * */ public class FileUtil { public static final int BYTESIZE = 1024; //每次讀取的大小 1KB /** * 將文件流保存在項目WEB-INF/temp目錄下,並且返回這個文件; * @param is 待轉化的文件流 * @param fileName 臨時文件名 * @return * @throws IOException */ public static File saveTempFile(InputStream is, String fileName){ String path = ""; try { path = URLDecoder.decode(FileUtil.class.getClassLoader().getResource("../temp").getPath(), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.println(path); ///E:/workspace/workspace for j2ee/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/MyTest/WEB-INF/temp/ File temp = new File(path + fileName); BufferedInputStream bis = null; BufferedOutputStream bos = null; try{ bis = new BufferedInputStream(is); bos = new BufferedOutputStream(new FileOutputStream(temp)); //把文件流轉為文件,保存在臨時目錄 int len = 0; byte[] buf = new byte[10*BYTESIZE]; //緩沖區 while((len=bis.read(buf)) != -1){ bos.write(buf, 0, len); } bos.flush(); }catch(IOException e){ e.printStackTrace(); }finally{ try { if(bos!=null) bos.close(); if(bis!=null) bis.close(); } catch (IOException e) { e.printStackTrace(); } } return temp; } /** * 刪除文件 用來刪除臨時文件 * @param file */ public static void deleteTempFile(File file){ file.delete(); } }
Servlet模擬調用:
1.模擬從本地讀取一個文件,構造文件流;
2.將這個文件流保存在項目臨時目錄 WEB-INF/temp下面;
3.對文件操作結束之后,刪除這個文件;
package com.java.servlet; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.java.file.FileUtil; /** * 構造servlet訪問 * @author CY * */ public class MyServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //模擬得到一個文件流 InputStream fis = new FileInputStream(new File("E:\\MA5800系列-pic.zip")); //保存在WEB-INF/temp目錄下 File temp = FileUtil.saveTempFile(fis, "MA5800.zip"); System.out.println(temp.getAbsolutePath()); //使用完之后刪除 temp.delete(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
訪問這個servlet,測試成功。