<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cooky - study blog

    Java, Grails, OpenSolaris, Linux, programming, skateboarding...

    用commons-fileupload-1.2 實現文件上傳

        前幾天搞文件上傳, Google到了Apache 的 commons-fileupload-1.2.jar 上傳組件, 研究了API然后結合Hibernate實現了上傳圖片
    并保存到MySQL數據庫. 今天重新寫了一遍, 由于不需要保存到數據庫了, 就實現了保存成文件格式.

        我的這個FileUpload web工程源文件下載如下 :
    FileUpload.rar . 解壓到當前文件夾后直接剪切到 Tomcat 主目錄下的 webapps 
    目錄下, 啟動 Tomcat 后在瀏覽器輸入 
    http://localhost:8080/FileUpload/upload.html 查看演示.

        我是用Eclipse 開發. 首先, 下載兩個開發包: commons-fileupload 和 commons-io(這個在應用commons-fileupload時會用到).
    這兩個開發包(jar文件) 在我前面提供的FileUpload 工程下的WEB-INF/lib下可以找到, 你也可以到官方下載:
    http://commons.apache.org/downloads/download_fileupload.cgi 下載 commons-fileupload-1.2.jar
    組件包 (直接下載地址:
    http://apache.mirror.phpchina.com/commons/fileupload/binaries/commons-fileupload-1.2-bin.zip),
    http://commons.apache.org/downloads/download_io.cgi 下載 commons-io-1.3.2 組件包(直接下載地址:
     
    http://apache.mirror.phpchina.com/commons/io/binaries/commons-io-1.3.2-bin.zip). 

        啟動Eclipse, 新建Web Project, 取名 FileUpload. 然后在WebRoot文件夾(Web根文件夾)下新建兩個文件夾(New->Folder) :
    ImagesUploaded 和 ImagesUploadTemp, 分別用來存放上傳文件和上傳時的臨時文件,稍后代碼里會用到.

         在WebRoot 文件夾下新建文件upload.html, 用來提供上傳用的form. 源代碼如下: 
         右擊src, 新建一個Servlet: FileUploadServlet, 路徑設為src/FileUploadServlet . 保存后WebRoot/WEB-INF/web.xml 更新為:

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <servlet-name>FileUploadServlet</servlet-name>
        <servlet-class>FileUploadServlet</servlet-class>
      </servlet>

      <servlet-mapping>
        <servlet-name>FileUploadServlet</servlet-name>
        <url-pattern>/FileUploadServlet</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>upload.html</welcome-file>
      </welcome-file-list>
    </web-app>


       
        其中,我把<welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list> 的歡迎文件設為了upload.html,
    這樣等完成后可能直接用
    http://localhost:8080/FileUpload/ 來訪問upload.html. 不改的話, 可以在http://localhost:8080/FileUpload/upload.html
    頁面上傳文件.    在寫FileUploadServlet 之前, 先將之前下載的commons-fileupload 和commons-io 組件包壓縮文件解壓出來, 把里面的
    commons-fileupload-1.2.jar (lib文件夾下) 和 commons-io-1.3.2.jar 拷到WebRoot/WEB-INF/lib 文件夾下, 以便使用它們的功能.

        FileUploadServlet.java 的源代碼如下, 附有詳細注解:
    FileUploadServlet.java

    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Iterator;
    import java.util.List;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;

    public class FileUploadServlet extends HttpServlet {

     public FileUploadServlet() {
      super();
     }

     public void destroy() {
      super.destroy(); // Just puts "destroy" string in log
      // Put your code here
     }

     public void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
      doPost(request, response);
     }

     public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
      final long MAX_SIZE = 3 * 1024 * 1024;// 設置上傳文件最大為 3M
      // 允許上傳的文件格式的列表
      final String[] allowedExt = new String[] { "jpg", "jpeg", "gif", "txt",
        "doc", "docx", "mp3", "wma", "m4a" };
      response.setContentType("text/html");
      // 設置字符編碼為UTF-8, 這樣支持漢字顯示
      response.setCharacterEncoding("UTF-8");

      // 實例化一個硬盤文件工廠,用來配置上傳組件ServletFileUpload
      DiskFileItemFactory dfif = new DiskFileItemFactory();
      dfif.setSizeThreshold(4096);// 設置上傳文件時用于臨時存放文件的內存大小,這里是4K.多于的部分將臨時存在硬盤
      dfif.setRepository(new File(request.getRealPath("/")
        + "ImagesUploadTemp"));// 設置存放臨時文件的目錄,web根目錄下的ImagesUploadTemp目錄

      // 用以上工廠實例化上傳組件
      ServletFileUpload sfu = new ServletFileUpload(dfif);
      // 設置最大上傳尺寸
      sfu.setSizeMax(MAX_SIZE);

      PrintWriter out = response.getWriter();
      // 從request得到 所有 上傳域的列表
      List fileList = null;
      try {
       fileList = sfu.parseRequest(request);
      } catch (FileUploadException e) {// 處理文件尺寸過大異常
       if (e instanceof SizeLimitExceededException) {
        out.println("文件尺寸超過規定大小:" + MAX_SIZE + "字節<p />");
        out.println("<a href=\"upload.html\" target=\"_top\">返回</a>");
        return;
       }
       e.printStackTrace();
      }
      // 沒有文件上傳
      if (fileList == null || fileList.size() == 0) {
       out.println("請選擇上傳文件<p />");
       out.println("<a href=\"upload.html\" target=\"_top\">返回</a>");
       return;
      }
      // 得到所有上傳的文件
      Iterator fileItr = fileList.iterator();
      // 循環處理所有文件
      while (fileItr.hasNext()) {
       FileItem fileItem = null;
       String path = null;
       long size = 0;
       // 得到當前文件
       fileItem = (FileItem) fileItr.next();
       // 忽略簡單form字段而不是上傳域的文件域(<input type="text" />等)
       if (fileItem == null || fileItem.isFormField()) {
        continue;
       }
       // 得到文件的完整路徑
       path = fileItem.getName();
       // 得到文件的大小
       size = fileItem.getSize();
       if ("".equals(path) || size == 0) {
        out.println("請選擇上傳文件<p />");
        out.println("<a href=\"upload.html\" target=\"_top\">返回</a>");
        return;
       }

       // 得到去除路徑的文件名
       String t_name = path.substring(path.lastIndexOf("\\") + 1);
       // 得到文件的擴展名(無擴展名時將得到全名)
       String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
       // 拒絕接受規定文件格式之外的文件類型
       int allowFlag = 0;
       int allowedExtCount = allowedExt.length;
       for (; allowFlag < allowedExtCount; allowFlag++) {
        if (allowedExt[allowFlag].equals(t_ext))
         break;
       }
       if (allowFlag == allowedExtCount) {
        out.println("請上傳以下類型的文件<p />");
        for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
         out.println("*." + allowedExt[allowFlag]
           + "&nbsp;&nbsp;&nbsp;");
        out.println("<p /><a href=\"upload.html\" target=\"_top\">返回</a>");
        return;
       }

       long now = System.currentTimeMillis();
       // 根據系統時間生成上傳后保存的文件名
       String prefix = String.valueOf(now);
       // 保存的最終文件完整路徑,保存在web根目錄下的ImagesUploaded目錄下
       String u_name = request.getRealPath("/") + "ImagesUploaded/"
         + prefix + "." + t_ext;
       try {
        // 保存文件
        fileItem.write(new File(u_name));
        out.println("文件上傳成功. 已保存為: " + prefix + "." + t_ext
          + " &nbsp;&nbsp;文件大小: " + size + "字節<p />");
        out.println("<a href=\"upload.html\" target=\"_top\">繼續上傳</a>");
       } catch (Exception e) {
        e.printStackTrace();
       }
     }

     }

     public void init() throws ServletException {
      // Put your code here
     }

    }

      

        保存后部署項目(MyEclipse下直接點擊Deploy J2EE...按鈕, 然后選擇Tomcat服務器). 沒有MyEclipse的話, 把WebRoot 拷到
    Tomcat 主目錄下的webapps 目錄下, 并重命名為 FileUpload 然后啟動Tomcat. (或直接下載我在文章開始提供的工程打包rar文件).
    最后打開瀏覽器, 輸入url:
     
    http://localhost:8080/FileUpload/upload.html .

        關于開發工具的基本配置( Eclipse 等), 請參加我的另一篇文章.


    Keep It Simple, Stupid

    posted on 2007-10-02 19:55 Cooky 閱讀(25405) 評論(51)  編輯  收藏 所屬分類: Java

    評論

    # re: 用commons-fileupload-1.2 實現文件上傳 2007-10-12 22:16 xpg

    好文章,先試用一下,謝謝!!  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2007-10-13 01:02 cooky

    @xpg
    3Q!  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2007-10-18 22:08 lion

    不錯 謝謝分享  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2007-10-19 00:37 cooky

    @lion
    :)  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2007-10-20 13:24 cooky

    用Firefox看排版有點小問題...不好意思  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2007-10-22 19:23 nike

    just test  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2007-10-22 19:24 nike

    確實很強  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2007-10-22 19:28 nike

    你很厲害哦  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2007-10-22 22:45 cooky

    @nike
    .....  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2007-11-05 23:23 WRF

    謝謝!  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2007-11-18 14:15 上帝也犯困

    頂一下,非常的感謝你.  回復  更多評論   

    # re: 用commons-fileupload-1.2 實上傳 2007-12-13 15:30 現文件

    upload.html  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2007-12-27 15:49 hehe

    ww  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2007-12-28 17:31 常常

    寫得不錯很有開源精神,不像有些人代碼開源還用軟件整理得亂七八糟。  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2008-01-03 21:23 cynthia

    謝謝,正著急呢。  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-01-04 11:09 lyle

    good good!!!  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2008-01-05 00:39 cc

    我把FileUpload.rar解壓到當前文件夾后直接剪切到 Tomcat 主目錄下的 webapps 目錄下, 啟動 Tomcat 后在瀏覽器輸入 http://localhost:8080/FileUpload/upload.html
    出現錯誤如下:
    javax.servlet.ServletException: Error allocating a servlet instance
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
    org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
    java.lang.Thread.run(Unknown Source)


    root cause

    java.lang.UnsupportedClassVersionError: Bad version number in .class file
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClass(Unknown Source)
    java.security.SecureClassLoader.defineClass(Unknown Source)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:873)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1326)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
    org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
    java.lang.Thread.run(Unknown Source)

    這是什么原因?

    麻煩大家幫忙分析一下  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-01-05 12:34 cooky

    java.lang.UnsupportedClassVersionError: Bad version number in .class file . 這個應該是由于JDK版本不一致. 我原來的好像是用JDK1.6做的. 你需要重新編譯一下. 版本一致有三個地方需要設置:
    1.安裝JDK(如1.5或1.6), 設置JAVA_HOME變量. 在Eclipse的菜單:
    Window->Preferences->Java->Installed JREs: (Add...)jdk1.5.x(或1.6.x)
    2.設置編譯版本:Window->Preferences->Java->Compiler:Compiler compliance level: 5.0(或6.0, 跟第1步中的一致)
    3.設置Tomcat運行環境:只要在第1步中設置了JAVA_HOME環境變量后,Tomcat會使用設置的JDK版本. 在MyEclipse需要另外進行設置:
    Window->Preferences->MyEclipse->Application Servers->Tomcat->Tomcat 6.x(或5.x)->JDK:jdk1.5.x(或1.6.x)
    [先把你要的Tomcat版本Enable一下]

    1,2,3中的選擇的JDK版本要一致.
      回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-01-05 12:35 cooky

    @cc
    如上  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-04-01 09:55 temper

    上傳大文件,比如為幾百m時,開始的時候會在fileList = sfu.parseRequest(request);拋出尺寸過大的異常,但是好像程序會繼續上傳,或者進行別的操作,幾分鐘以后才會跳到異常頁(時間可能根據個人的機器配置不同)。
    請問有沒有一個可以遇到異常,馬上到錯誤頁的方法?  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2008-04-01 10:05 Cooky

    @temper 好像是這樣的,我還沒找到好的方法。。。  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-04-08 20:26 初樹雷

    我的  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-04-10 14:11 paulQuei

    我靠,我擺渡過來的  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2008-04-10 14:19 Cooky

    @paulQuei 呵呵  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-04-16 21:37 藍色自由

    不錯,謝謝~~~  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2008-05-11 20:46 lc

    傳遞輸入地址的Form一定要multipart/Form-data編碼嗎?
    我還想Form中輸入一些別的內容,用request.getParameter就找不到啊。  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-05-13 20:39 WEIQ

    你寫的很好啊,非常感謝,我在網上找了很多個,沒有一個像你寫的那么明了的  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-05-13 21:23 WEIQ

    為什么一定要過濾掉表單里的文本字段啊,想加點文字描述都不行  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2008-05-13 22:09 Cooky

    @WEIQ
    那個好像是ServletFileUpload的parseRequest方法的問題,它會重新解析request. 至于commons-fileupload可不可以一起處理multipart/form-data和文本,我不清楚,應該可以的吧. 你再查下資料好了, 這個我好久沒搞了.
    ;)  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-05-18 08:11 王林

    哪位高人可以提供上傳文件到數據庫的代碼?顯現身手吧  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-05-20 14:27 beenylee

    非常感謝您的無私奉獻  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-05-20 14:31 beenylee

    挺佩服你的,我下載到了common fileuplod包以后,看了API還是不會用,看完您這篇文章才學會使用,我想請教的是,對于一個陌生的東西(比如common fileupload),想要正確使用它,有沒有普遍的方法?  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2008-05-21 14:50 dudu

    那我表單傳過來的其他數據怎么獲得?用request.getParameter就找不到啊  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2008-06-25 13:08 huang

    寫的太好了!謝謝了!  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-11-05 12:32 123

    xiexie  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2008-11-05 19:59 cooky

    好久以前寫的了, 多謝大家的支持.
    那時是在學校里, 自由時間比較多, 現在工作半年了, 大多接觸的是 GWT 和 Ruby on Rails. 不過最近跟幾個朋友用 Lightweight JavaEE 搞個 Blog 網站, 到時會把源碼公開 (在 Google Code 上), 消息我會更新在我的 blogpost 里 (見此網站左邊的鏈接), 也盡量記得把項目地址發在這 :)

    祝大家的程序員生涯一帆風順 ;-)  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2009-01-07 10:42 java

    實用,謝了  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2009-03-04 00:47 三棵

    不錯
      回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2009-04-06 22:12

    謝謝樓主  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2009-04-06 22:12

    謝謝樓主 很好用  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2009-06-02 23:31 江哥

    ImagesUploaded 和 ImagesUploadTemp沒有看到上傳的內容,進行測式的時候,頁面顯示成功了,也把上傳的文件大小,時間打印出來的,就是在ImagesUploaded 和 ImagesUploadTemp沒有看到上傳的內容?這是怎么回事?
    dfif.setRepository(new File(request.getRealPath("/")
    + "ImagesUploadTemp"));
    中的request.getRealPath(有下劃線)是不推薦使作的方法,和這個有關嗎?  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2009-06-03 09:39 cooky

    @江哥
    可能是文件路徑的問題. 可以使用以下方法來獲得保存文件的路徑:
    假設這個Servlet的.class文件最終被放在 FileUpload/WEB-INF/classes/文件夾中 (Windows 下的文件路徑分隔符好像應該使用反斜杠 \), 而要保存文件的文件夾位于 FileUpload/WEB-INF/ImagesUploaded/, 則用以下代碼修改后替換原來的保存文件的部分 (fileItem.wirte(new File(u_name)) 那兒):
    String fileName = "a.jpg";// TODO replace with your file name
    /* file path separator: "/" for Unix/Linux, "\\" for Windows */
    final String PATH_SEPARATOR = "/";
    File currFolder = null;
    try {
    currFolder = new File(Main.class.getResource("/").toURI());
    } catch (URISyntaxException e) {
    e.printStackTrace();// TODO log the exception
    }
    if (currFolder != null) {
    String pathToSave = currFolder.getParent() + PATH_SEPARATOR + "ImagesUploaded" + PATH_SEPARATOR;
    pathToSave += fileName;
    // System.out.println(pathToSave);
    fileItem.write(new File(pathToSave));
    } else {
    System.out.println("Can not locate the folder to save file");// TODO
    }  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2009-07-15 11:52 小強

    各種方法非常好,謝謝  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2010-01-30 10:15 hao

    很不錯,頂!!!!!  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2010-07-06 09:22 wh

    ding ~~~  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2012-03-26 20:34 jiaoxuekun

    求源碼  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳[未登錄] 2012-09-26 14:31 s

    謝謝~~  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2012-10-19 18:54 ly

    多謝啊 看了這個學習了  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2012-11-26 13:52 tw

    3Q  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2012-12-19 19:20 清泉..

    謝謝,寫得很詳細  回復  更多評論   

    # re: 用commons-fileupload-1.2 實現文件上傳 2014-08-30 21:30 213213

    非常感謝。已經掌握了  回復  更多評論   

    主站蜘蛛池模板: 男人进去女人爽免费视频国产 | 少妇亚洲免费精品| 亚洲中文字幕无码爆乳app| 国产成人精品免费视频动漫| 在线观看亚洲一区二区| 色欲A∨无码蜜臀AV免费播| 亚洲自偷自偷精品| 日韩视频在线精品视频免费观看 | 手机在线免费视频| 亚洲人成色4444在线观看| 成人在线视频免费| 亚洲精品色在线网站| 亚洲精品成a人在线观看| 一级毛片免费在线播放| 国产亚洲成人久久| 无码国产精品一区二区免费16 | 亚洲乱码一二三四区国产| 在线观看日本免费a∨视频| 在线a亚洲老鸭窝天堂av高清| 成人免费视频一区二区三区| 亚洲AV无码专区在线电影成人| 国产成人一区二区三区免费视频| 男人免费视频一区二区在线观看| 国产av无码专区亚洲av果冻传媒 | 精品亚洲综合在线第一区| 91短视频在线免费观看| 亚洲 暴爽 AV人人爽日日碰| 日韩毛片免费在线观看| 久久精品成人免费国产片小草 | 亚洲综合无码一区二区痴汉| 在线免费观看国产视频| 韩国免费a级作爱片无码| 99久久精品国产亚洲| 日韩成人免费aa在线看| 中文永久免费观看网站| 亚洲国产模特在线播放| 免费a级毛片无码a∨性按摩| 少妇人妻偷人精品免费视频 | 67194在线午夜亚洲| 久久久精品国产亚洲成人满18免费网站| 国产精品免费大片|