Java重點之小白解析--淺談數據流形式圖片上載


閑言少敘,直入主題。

/**
  * @throws IOException
  *
 * @category 上傳文檔
 * @Title: uploadImage
 * @Description:
 * @return void    返回類型
 * @throws
  */
 protected int uploadFile(HttpServletRequest request, HttpServletResponse response, String saveFilename) {
  int size = 1024 * 1024 * 2;
  try {
   // 上傳時生成的文件保存目錄
   String realSavePath = sp.makePath(saveFilename, sp.getFileSaveRootPath());
   // 上傳時生成的臨時文件保存目錄
   String tempPath = this.getServletContext().getRealPath(sp.getTemp_Path());
   File tmpFile = new File(tempPath);
   if (!tmpFile.exists()) {
    // 創建臨時目錄當前已處理
    tmpFile.mkdir();
   }
   
   //sp.makePath(savePath);
   
   InputStream in = new BufferedInputStream(new DataInputStream(request.getInputStream()), size);
   OutputStream out = new BufferedOutputStream(new FileOutputStream(realSavePath ), size);
   byte buffer[] = new byte[1024];
   // 判斷輸入流中的數據是否已經讀完的標識
   int len = 0;
   // 循環將輸入流讀入到緩沖區當中,(len=in.read(buffer))>0就表示in里面還有數據
   while ((len = in.read(buffer)) > 0) {
    // 使用FileOutputStream輸出流將緩沖區的數據寫入到指定的目錄(savePath + "\\"
    // +filename)當
     
    out.write(buffer, 0, len);
   }
   // 關閉輸入流
   in.close();
   // 關閉輸出流
   out.close();

   return 1;

  } catch (IOException e) {
   System.out.println("io操作異常");
   e.printStackTrace();
   return 0;
  }

 }

 注:

saveFilename      :是文件名,用於存儲到數據庫中,便於索引文件。

sp.getFileSaveRootPath():是文件存儲地址,存儲地址這塊遇到一些問題下面會提到。

sp.getTemp_Path())   :當文件過大時,緩存路徑。

文件上傳時遇到了幾個問題以及解決的辦法:

問題一:文件地址存儲問題。

其一 以存儲到相對路徑中,一般都是這么搞,所謂相對路徑,在這里一般是相對系統的發布路徑,也就是說,如果是web項目,tomcat/ebapp文件夾,這目錄下會相對存在一個與項目同名的文件夾, 存放項目發布后的資源,上傳文檔的路徑也是以此為根目錄的,但是也有人認為是以Root為根目錄,對此不太明白,望各位走過路過的大神稍微指點指點。

在這里會遇到一個問題:就是每次重新編譯項目,就會出現原來上傳的資源消失了的現象,其實這是必然的現象,因為說是更新,其實仔細查看Tomcat的啟動流程就會發現,它是先刪除原來編譯的項目文件,然后再重新編譯現在的文件,會出現資源的消失也是必然的。由此引出了下面的解決思路。

其二 可以存儲到盤中的任意路徑中,這就需要用到Tomcat的一個虛擬存儲技術。

所謂虛擬存儲,是指將Tomcat下一個虛擬路徑,映射到磁盤中的實際路徑中去。

實現方式一般有兩種,

方式一 tomcat安裝目錄下conf/servlet.xml中 <HOST>標簽下配置

<Context path="/demo" docBase="E:\demo" />

方式二 在conf\Catalina\localhost中添加文件名為test.xml

內容為 <?xml version="1.0" encoding="UTF-8"?>
<Context crossContext="true" docBase="D:\SavePhotos"  reloadable="true"/>

即可實現文件的上傳。這是項目部署之后的實現方式

如果項目還在本地,一般都會有項目名,那么只需修改文件名為   文件名#test.xml 即可。

問題二。文件名問題。

問題三。文件名后綴問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM