精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從零搭建開發腳手架 Spring Boot文件上傳的多種方式、原理及遇到的問題

開發 架構
Spring支持可插拔的MultipartResolver對象進行文件上傳。目前有2個實現;在Servlet 2.5 及早期版本之前,文件上傳需要借助 commons-fileupload 組件來實現。從Servlet 3.0規范之后,提供了對文件上傳的原生支持,進一步簡化了應用程序的實現。

[[386968]]

 本文轉載自微信公眾號「Java大廠面試官」,作者laker。轉載本文請聯系Java大廠面試官公眾號。  

文件上傳

概述

Spring支持可插拔的MultipartResolver對象進行文件上傳。目前有2個實現;

  • 在Servlet 2.5 及早期版本之前,文件上傳需要借助 commons-fileupload 組件來實現。
  • 從Servlet 3.0規范之后,提供了對文件上傳的原生支持,進一步簡化了應用程序的實現。

commons-fileupload

要使用commons-fileupload的CommonsMultipartResolver處理文件上傳,我們需要添加以下依賴項:

  1. <dependency> 
  2.     <groupId>commons-fileupload</groupId> 
  3.     <artifactId>commons-fileupload</artifactId> 
  4. </dependency> 

配置定義CommonsMultipartResolver bean。

  1. @Bean(name = "multipartResolver"
  2. public CommonsMultipartResolver multipartResolver() { 
  3.     CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); 
  4.     multipartResolver.setMaxUploadSize(100000); 
  5.     return multipartResolver; 

Servlet 3.0

SpringBoot項目參見MultipartAutoConfiguration.java類,默認會自動配置StandardServletMultipartResolver,我們不需要做任何事情,就能使用了。

  1. @Configuration(proxyBeanMethods = false
  2. @ConditionalOnClass({ Servlet.class, StandardServletMultipartResolver.class, MultipartConfigElement.class }) 
  3. @ConditionalOnProperty(prefix = "spring.servlet.multipart"name = "enabled", matchIfMissing = true
  4. @ConditionalOnWebApplication(type = Type.SERVLET) 
  5. @EnableConfigurationProperties(MultipartProperties.class) 
  6. public class MultipartAutoConfiguration { 
  7.  
  8.  private final MultipartProperties multipartProperties; 
  9.  
  10.  public MultipartAutoConfiguration(MultipartProperties multipartProperties) { 
  11.   this.multipartProperties = multipartProperties; 
  12.  } 
  13.  
  14.  @Bean 
  15.  @ConditionalOnMissingBean({ MultipartConfigElement.class, CommonsMultipartResolver.class }) 
  16.  public MultipartConfigElement multipartConfigElement() { 
  17.   return this.multipartProperties.createMultipartConfig(); 
  18.  } 
  19.  
  20.  @Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) 
  21.  @ConditionalOnMissingBean(MultipartResolver.class) 
  22.  public StandardServletMultipartResolver multipartResolver() { 
  23.   StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver(); 
  24.   multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily()); 
  25.   return multipartResolver; 
  26.  } 
  27.  

常見文件上傳相關需求,我整理總結如下:

單文件上傳

前端核心代碼

  1. <form method="POST" action="/upload-file" enctype="multipart/form-data"
  2.     <table
  3.         <tr> 
  4.             <td><input type="file" name="file" /></td> 
  5.         </tr> 
  6.         <tr> 
  7.             <td><input type="submit" value="Submit" /></td> 
  8.         </tr> 
  9.     </table
  10. </form> 

 

 

 

后端核心代碼

  1. @RequestMapping(value = "/upload-file", method = RequestMethod.POST) 
  2. public String submit(@RequestParam("file") MultipartFile file) { 
  3.     return "ok"

 

 

 

多文件上傳

前端核心代碼

 

  1. <form method="POST" action="/upload-files" enctype="multipart/form-data"
  2.     <table
  3.         <tr> 
  4.             <td>Select a file to upload</td> 
  5.             <td><input type="file" name="files" /></td> 
  6.         </tr> 
  7.         <tr> 
  8.             <td>Select a file to upload</td> 
  9.             <td><input type="file" name="files" /></td> 
  10.         </tr> 
  11.         <tr> 
  12.             <td>Select a file to upload</td> 
  13.             <td><input type="file" name="files" /></td> 
  14.         </tr> 
  15.         <tr> 
  16.             <td><input type="submit" value="Submit" /></td> 
  17.         </tr> 
  18.     </table
  19. </form> 

 

后端核心代碼

我們需要注意每個輸入字段具有相同的名稱,以便可以將其作為MultipartFile數組進行訪問:

  1. @RequestMapping(value = "/upload-files", method = RequestMethod.POST) 
  2.    public String submit(@RequestParam("files") MultipartFile[] files) { 
  3.        return "ok"
  4.    } 

帶其他參數的文件上傳

前端核心代碼

  1. <form method="POST" action="/upload-files-with-data" enctype="multipart/form-data"
  2.     <table
  3.         <tr> 
  4.             <td>Name</td> 
  5.             <td><input type="text" name="name" /></td> 
  6.         </tr> 
  7.         <tr> 
  8.             <td>Email</td> 
  9.             <td><input type="text" name="email" /></td> 
  10.         </tr> 
  11.         <tr> 
  12.             <td>Select a file to upload</td> 
  13.             <td><input type="file" name="file" /></td> 
  14.         </tr> 
  15.         <tr> 
  16.             <td><input type="submit" value="Submit" /></td> 
  17.         </tr> 
  18.     </table
  19. </form> 

 

后端核心代碼

“在控制器中,我們可以使用@RequestParam注解獲取所有表單數據,也可以不使用@RequestParam獲取

  1. @PostMapping("/upload-files-with-data"
  2. public String submit( 
  3.             @RequestParam MultipartFile file, @RequestParam String name
  4.             String email) { 
  5.     return "ok"

優雅的后端實現

我們還可以將所有表單字段封裝在類中,當文件中有很多其他字段時,就很方便。

  1. public class FormDataWithFile { 
  2.     private String name
  3.     private String email; 
  4.     private MultipartFile file; 
  5. @PostMapping("/upload-files-with-data"
  6. public String submit(FormDataWithFile formDataWithFile) { 
  7.     return "ok"

多個(文件+參數)上傳

功能需求類似于上傳如下請求:

  1.     { 
  2.         "name""a"
  3.         "emainl""b"
  4.         "file"
  5.     }, 
  6.     { 
  7.         "name""a"
  8.         "emainl"""
  9.         "file"
  10.     } 

但是這樣寫是行不通的,解決方案如下:

方案一:上傳文件Base64

把文件轉為base64字符串,但是轉換后的字符串大小是原圖片大小的3倍。(慎用)

  1.     { 
  2.         "name""a"
  3.         "emainl"""
  4.         "fileBase64":"xxxxx" 
  5.     }, 
  6.     { 
  7.         "name""b"
  8.         "emainl"""
  9.         "fileBase64":"xxxxx" 
  10.     } 

方案二:上傳文件url

先把圖片上傳到服務器,獲取文件url,然后再把文件的URL與其他參數上傳到后端

  1.     { 
  2.         "name""a"
  3.         "emainl"""
  4.         "fileUrl":"xxxxx.png" 
  5.     }, 
  6.     { 
  7.         "name""b"
  8.         "emainl"""
  9.         "fileUrl":"xxxxx.png" 
  10.     } 

文件上傳原理

通常一個文件上傳的請求內容格式如下:

  1. POST /upload HTTP/1.1  
  2. Host:xxx.org  
  3. Content-type: multipart/form-data, boundary="boundaryStr" 
  4.  
  5. --boundaryStr 
  6. content-disposition: form-data; name="name" 
  7.  
  8. Name Of Picture 
  9. --boundaryStr 
  10. Content-disposition: attachment; name="picfile"; filename="picfile.gif" 
  11. Content-type: image/gif 
  12. Content-Transfer-Encoding: binary 
  13.  
  14. ...contents of picfile.gif... 

其中 boundary 指定了內容分割的邊界字符串;

Content-dispostion 指定了這是一個附件(文件),包括參數名稱、文件名稱;

Content-type 指定了文件類型;

Content-Transfer-Encoding 指定內容傳輸編碼;

Tomcat 實現了 Servlet3.0 規范,通過ApplicationPart對文件上傳流實現封裝, 其中,DiskFileItem 描述了上傳文件實體,在請求解析時生成該對象, 需要關注的是,DiskFileItem 聲明了一個臨時文件,用于臨時存儲上傳文件的內容, SpringMVC 對上層的請求實體再次封裝,最終構造為MultipartFile傳遞給應用程序。示例如下:

 

生成的臨時文件如下:

這個是臨時文件的目錄,可以配置的

 

圖片

臨時文件打開,查看其內容如下:

 

參數:name

 

參數:file

上傳完畢后,臨時文件會刪除

 

“可以看到,不是file類型的參數也會寫入到臨時文件。

通過Fiddler進行抓包:

  1. POST http://localhost:8080/upload-files-with-data HTTP/1.1 
  2. cache-control: no-cache 
  3. Accept: */* 
  4. Host: localhost:8080 
  5. accept-encoding: gzip, deflate 
  6. content-type: multipart/form-data; boundary=--------------------------895818005136536360125479 
  7. content-length: 268707 
  8. Connection: keep-alive 
  9.  
  10. ----------------------------895818005136536360125479 
  11. Content-Disposition: form-data; name="name" 
  12.  
  13. 123 
  14. ----------------------------895818005136536360125479 
  15. Content-Disposition: form-data; name="file"; filename="test.txt" 
  16. Content-Type: text/plain 
  17.  
  18. abc123 
  19. ----------------------------895818005136536360125479 
  20. Content-Disposition: form-data; name="file"; filename="1114289-20190110120111312-1475461850.png" 
  21. Content-Type: image/png 
  22.  
  23. ...contents of png... 
  24. ----------------------------895818005136536360125479-- 

到這里,我們就大概就知道了HTTP上傳文件的原理了。HTTP把需要上傳的表單的所有數據按照一定的格式存放在請求體中,對于文件也是同樣的。

  • Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryqj67FUBQUHXZj78G表示要上傳附件,
  • 其中boundary表示分隔符,如果表單中有多項,就要使用boundary進行分隔,每個表單項由------FormBoundary開始,以------FormBoundary結尾。例如這樣:
  1. ------FormBoundary 
  2. Content-Disposition: form-data; name="param1" 
  3.  
  4. value1 
  5. ------FormBoundary 

這個boundary的值是由瀏覽器生成的,由瀏覽器來保證與上傳內容不重復。

  • 在每個分隔項里,需要我們去重點關注Content-Disposition消息頭,其中第一個參數總是固定不變的form-data,name表示表單元素屬性名,回車換行符后面的內容就是元素的值。還有Content-Type表示我們上傳的文件的MIME類型,我們在服務器端需要根據這個進行文件的區分。
  • 最后一個boundary的結尾會多兩個--

HTTP就是按照這種格式,把表單中的數據封裝成一個請求一股腦的發給服務器端,服務器端根據這種規則對接收到的請求進行解析,從而完成文件上傳功能。

下面是從網上找的一個后臺解析示例??梢訢EBUG跟蹤代碼去分析。

  1. @WebServlet(urlPatterns = "/lakerfile"
  2. public class FileUploadDemo extends HttpServlet { 
  3.     @Override 
  4.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  5.         DiskFileItemFactory fac = new DiskFileItemFactory(); 
  6.         ServletFileUpload upload = new ServletFileUpload(fac); 
  7.         upload.setFileSizeMax(10 * 1024 * 1024); 
  8.         upload.setSizeMax(20 * 1024 * 1024); 
  9.         if (ServletFileUpload.isMultipartContent(request)) { // 只處理Multipart請求 
  10.                 List<FileItem> list = upload.parseRequest(new ServletRequestContext(request));// 解析報文 
  11.                 for (FileItem item : list) { 
  12.                     if (item.isFormField()) { 
  13.                         String fileName = item.getFieldName(); 
  14.                         String value = item.getString("UTF-8"); 
  15.                     } else { 
  16.                         File file = new File(realPath, name); 
  17.                         item.write(file); 
  18.                         ... 
  19.         } 
  20.     } 

遇到的問題

Spring Boot上傳文件大小限制

  1. spring: 
  2.   servlet: 
  3.     multipart: 
  4.       # 最大文件大小(單個) 
  5.       max-file-size: 10MB 
  6.       # 文件大于該閾值時,將寫入磁盤,支持B/KB/MB單位 
  7.       file-size-threshold: 0B 
  8.       # //最大請求大小(總體) 
  9.       max-request-size: 100MB 

這幾個參數由SpringMVC控制,用于注入 Servlet3.0 的文件上傳配置,關聯類如下:

  1. public class MultipartConfigElement { 
  2.     private final String location;// = ""
  3.     private final long maxFileSize;// = -1; 
  4.     private final long maxRequestSize;// = -1; 
  5.     private final int fileSizeThreshold;// = 0; 

上傳文件過大異常攔截

  1. @ExceptionHandler(MaxUploadSizeExceededException.class) 
  2. public Response handleMaxSizeException(MaxUploadSizeExceededException e) { 
  3.     log.error(e.getMessage(), e); 
  4.     return Response.error(500, "File too large!"); 

自定義tomcat工作目錄

自定義臨時文件生成目錄

  1. server: 
  2.   tomcat: 
  3.     basedir: /laker/tmp 

使用swagger上傳文件不起作用

  • allowMultiple=true:表示是數組格式的參數
  • dataType = "__file":表示數組中參數的類型
  1. @ApiOperation(value = "上傳", notes = "上傳"
  2. @ApiImplicitParams({ 
  3.             @ApiImplicitParam(paramType = "form"name = "file", value = "文件對象", required = true, dataType = "__file"), 
  4.             @ApiImplicitParam(paramType = "form"name = "files", value = "文件數組", allowMultiple = true, dataType = "__file"
  5.     }) 
  6. public void test(@RequestParam("file") MultipartFile file, @RequestParam(value = "files", required = false) MultipartFile[] files) throws Exception { 

參考:

https://www.cnblogs.com/yougewe/p/12916211.html

 

https://www.baeldung.com/spring-file-upload

 

責任編輯:武曉燕 來源: Java大廠面試官
相關推薦

2020-08-19 08:55:47

Redis緩存數據庫

2021-07-13 18:42:38

Spring Boot腳手架開發

2021-09-01 10:07:43

開發零搭建Groovy

2021-04-28 16:10:48

開發腳手架 Spring

2021-03-09 17:11:09

數據庫腳手架開發

2021-07-29 18:49:49

Spring開發腳手架

2021-02-19 22:43:50

開發腳手架Controller

2021-05-13 17:02:38

MDC腳手架日志

2021-04-13 14:47:53

認證授權Java

2025-05-16 07:24:41

Springkafka腳手架

2021-06-02 17:58:49

腳手架 冪等性前端

2021-04-20 19:24:16

腳手架 Java微信

2020-06-29 11:35:02

Spring BootJava腳手架

2021-01-07 05:34:07

腳手架JDK緩存

2016-08-10 14:59:41

前端Javascript工具

2023-11-21 17:36:04

OpenFeignSentinel

2021-05-21 05:22:52

腳手架工具項目

2018-08-30 16:08:37

Node.js腳手架工具

2018-06-11 14:39:57

前端腳手架工具node.js

2024-01-23 08:47:13

BeanSpring加載方式
點贊
收藏

51CTO技術棧公眾號

性xxxx视频播放免费| 欧美精品久久久久性色| 国产91亚洲精品久久久| 中文字幕一区视频| 国产91精品一区二区绿帽| 欧美三级韩国三级日本三斤在线观看 | 国产成人澳门| 欧美亚洲综合一区| 免费在线看黄色片| 18免费在线视频| 成人深夜视频在线观看| 国产精品久久久久一区二区| 成人免费视频网站入口::| 奇米影视777在线欧美电影观看 | 欧美性受xxx| 日日操免费视频| 精品少妇一区| 欧美一级视频精品观看| 一本久道中文无码字幕av| 日本欧美电影在线观看| 国产精品日日摸夜夜摸av| 精品中文字幕一区| 国产超碰人人模人人爽人人添| 久久影院亚洲| 97色在线视频观看| 欧美日韩在线观看成人| 波多野结衣在线观看一区二区三区 | 亚洲免费大片在线观看| 欧美重口乱码一区二区| 欧美视频久久久| 国产一区二区三区免费观看| 国产成人欧美在线观看| 欧美精品亚洲精品日韩精品| 最新国产精品久久久| 中文字幕日韩免费视频| 亚洲AV无码国产精品| jizz18欧美18| 日韩一区二区免费电影| 欧美成人乱码一二三四区免费| 在线观看欧美日韩电影| 午夜精品免费在线| 国产精品国产三级国产专区51| 精品孕妇一区二区三区| 亚洲国产精品ⅴa在线观看| 免费av在线一区二区| 亚洲欧美一区二区三| 高清不卡在线观看av| 亚洲综合在线播放| www.超碰在线.com| 国产黑丝在线一区二区三区| 91久久精品日日躁夜夜躁国产| 在线观看国产一区二区三区| 日韩高清在线一区| 国产999精品视频| 国产九色91回来了| 七七婷婷婷婷精品国产| 国产精品专区第二| 亚洲熟妇av乱码在线观看| 蜜桃传媒麻豆第一区在线观看| 国产精品第七影院| 国产女优在线播放| 麻豆精品一区二区| 亚洲一区二区三区sesese| 国产人妻精品一区二区三| 精品一区二区在线看| 91亚洲精品久久久| 狠狠躁日日躁夜夜躁av| 92精品国产成人观看免费| 蜜桃视频在线观看91| 黄上黄在线观看| 国产精品久久久久久亚洲毛片| 综合色婷婷一区二区亚洲欧美国产| 久草中文在线| 亚洲一区二区三区中文字幕在线| 欧美乱大交xxxxx潮喷l头像| 亚洲一级少妇| 欧美日韩在线不卡| 亚洲欧美日韩一二三区| 国产福利一区二区精品秒拍| 亚洲欧美日韩中文视频| 91麻豆精品国产91久久综合| 亚洲国产精品久久久久蝴蝶传媒| 欧美黑人巨大xxx极品| 可以免费在线观看的av| 蜜桃久久精品一区二区| 成人av播放| 黄色在线免费观看大全| 亚洲情趣在线观看| 久久免费视频3| 亚洲精品一区av| 337p日本欧洲亚洲大胆色噜噜| 四虎永久免费影院| 久久精品青草| 91高潮精品免费porn| 亚洲天堂男人网| 成人动漫在线一区| 亚洲一区二区三区午夜| 后进极品白嫩翘臀在线播放| 色婷婷综合久久久中文字幕| 午夜激情影院在线观看| 美女久久99 | 91www在线| 欧美亚洲免费在线一区| 欧美夫妇交换xxx| 日韩精品dvd| 91国内免费在线视频| 中文字幕在线播放不卡| 99久久精品免费精品国产| 亚洲一区二三| 自拍偷拍欧美视频| 精品乱人伦小说| 天天摸日日摸狠狠添| 伊人成年综合电影网| 国产日韩精品一区二区| 性xxxfllreexxx少妇| 亚洲乱码日产精品bd| 国产精品天天av精麻传媒| 国产伦乱精品| 欧美另类暴力丝袜| 在线观看国产精品入口男同| 久久青草国产手机看片福利盒子| 日韩欧美猛交xxxxx无码| 久久亚洲国产精品尤物| 亚洲欧洲在线看| 亚洲天堂日韩av| 高清在线成人网| 中文字幕精品在线播放| 狠狠久久综合| 国产一区二区三区在线播放免费观看| 亚洲视频免费播放| 国产成人精品免费一区二区| 做爰高潮hd色即是空| 日韩一区精品| 国产亚洲福利一区| 黄色av一级片| 久久婷婷国产综合国色天香 | 欧美第一页在线观看| 日韩和欧美一区二区三区| 精品国产免费久久久久久尖叫| 视频在线这里都是精品| 欧美一区二区三区日韩| 无码人妻精品中文字幕| 激情综合亚洲精品| 中文字幕久久综合| 台湾天天综合人成在线| 日韩一级裸体免费视频| 在线免费av片| 中文字幕亚洲精品在线观看| 亚洲一区二区三区观看| 午夜av一区| 亚洲自拍偷拍第一页| 婷婷丁香在线| 亚洲国产黄色片| 毛片在线免费视频| 久久午夜老司机| 91视频免费版污| 91蜜臀精品国产自偷在线| 国产精品一香蕉国产线看观看 | 中文字幕第一区综合| 最新中文字幕免费视频| 999久久久国产精品| 国产在线视频不卡| 18+激情视频在线| 精品福利av导航| 欧美黑人一区二区| 中文字幕国产一区| 国产伦精品一区二区三区妓女下载 | 亚洲国产精品无码av| 欧美电影免费网站| 清纯唯美亚洲综合| 888av在线| 日韩一区二区免费在线电影| 免费在线观看黄网站| 久久久www成人免费无遮挡大片| 国产成人精品视频ⅴa片软件竹菊| 日韩精品免费一区二区三区| 99精品国产高清一区二区| 国产精品一二三产区| 国产亚洲aⅴaaaaaa毛片| 国产精品久久久久久久久久久久久久久久 | 亚洲蜜桃在线| 亚洲**毛片| 欧美综合一区第一页| 91在线不卡| 日韩欧美在线影院| 亚洲欧美综合自拍| 亚洲丝袜精品丝袜在线| 日韩www视频| 免费成人性网站| 高清欧美精品xxxxx| 不卡中文字幕| 国产麻豆乱码精品一区二区三区 | 精品国产一区二区三区四区精华 | 蜜臀av国产精品久久久久| 男人的天堂视频在线| 天天躁日日躁狠狠躁欧美| 国产欧美精品久久久| 678在线观看视频| 日日骚av一区| 婷婷婷国产在线视频| 这里只有精品视频在线观看| 国产欧美日韩另类| 亚洲精品欧美在线| 久久久久久成人网| 97久久精品人人澡人人爽| 亚洲精品第三页| 久久先锋资源| 性欧美大战久久久久久久| 91欧美国产| 欧美在线3区| 国产福利一区二区精品秒拍| 91在线网站视频| 精品日韩视频| 2018国产精品视频| 污视频在线免费观看网站| 中文欧美日本在线资源| 视频一区二区三区国产| 日韩精品一区二区三区在线播放| 黄色一区二区视频| 欧美色道久久88综合亚洲精品| 欧美黑人精品一区二区不卡| 国产精品久久久久久亚洲毛片 | 青春有你2免费观看完整版在线播放高清 | 亚洲一区二区三区视频在线播放| 国产又粗又长免费视频| 久久精品网站免费观看| 亚洲一区二区在线免费| 国产精品自拍三区| 国产高清av片| 激情丁香综合五月| 激情五月俺来也| 日韩精品一级中文字幕精品视频免费观看| 久久久久久www| 亚洲手机在线| 日本黄大片在线观看| 欧美一区高清| 二级片在线观看| 天天做天天爱天天综合网| 少妇免费毛片久久久久久久久| 天堂一区二区三区四区| 久久99久久精品国产| 精品精品精品| 精品无码久久久久久久动漫| 好吊妞视频这里有精品| 国产98在线|日韩| 成人自拍在线| 精品国产乱码久久久久久蜜柚 | 亚洲精品mp4| 午夜av免费在线观看| 亚洲精品国产免费| 手机福利在线| 国产一区二区欧美日韩| avtt在线播放| 日韩最新在线视频| av网址在线| 欧美激情精品久久久久久大尺度| 日韩少妇视频| 久久免费精品视频| 中日韩脚交footjobhd| 欧洲成人午夜免费大片| 免费成人美女女| 91精品国产综合久久久久久蜜臀 | 在线国产精品网| 91九色精品| 国产一级做a爰片久久毛片男| 欧美精品一卡| 精品人妻人人做人人爽| 亚洲免费播放| 毛葺葺老太做受视频| 久久精品国产精品青草| 女王人厕视频2ⅴk| av中文字幕在线不卡| 日本一道本视频| 亚洲猫色日本管| 成年人午夜视频| 欧美性大战久久久久久久蜜臀| 夜夜躁狠狠躁日日躁av| 欧美mv日韩mv国产| 国产福利在线| 欧美久久精品一级黑人c片 | 欧美色另类天堂2015| 中文字幕欧美色图| 欧美成人video| 黄色在线小视频| 色综合视频网站| 欧洲av不卡| www日韩av| 欧美裸体在线版观看完整版| 国产日韩第一页| av成人国产| 天堂av2020| 99re这里只有精品视频首页| 小向美奈子av| 精品久久久国产| 国产乱淫av免费| 亚洲毛片在线观看| 中国av在线播放| 国产精品流白浆视频| aaa国产精品视频| 亚洲三级一区| 午夜在线精品| 美女被爆操网站| 国产精品美女www爽爽爽| 国产精品18p| 8x8x8国产精品| 久久久pmvav| 久久久久国产一区二区三区| 国产成人免费精品| 免费亚洲精品视频| 国产一区二区三区四区三区四| 中日韩av在线播放| 久久精品免视看| 日韩三级小视频| 91精品国产91久久久久久一区二区 | 哪个网站能看毛片| 国产精品小仙女| 北条麻妃在线观看视频| 欧美在线观看一区二区| 婷婷五月综合久久中文字幕| 久久99精品久久久久久青青91| 精品久久在线| 色一情一乱一伦一区二区三区| 亚洲深夜av| 精品影片一区二区入口| 亚洲综合自拍偷拍| 99热这里只有精品66| 中文字幕久久精品| 91av一区| 亚洲春色在线视频| 老**午夜毛片一区二区三区| 天天插天天射天天干| 亚洲一区二区偷拍精品| 精品国产区一区二| 超碰精品一区二区三区乱码| 国产三级一区| 亚洲国产精品123| 美腿丝袜亚洲色图| 精品人妻中文无码av在线| 在线观看av不卡| av每日在线更新| 国产精品视频精品| 欧美mv日韩| 亚洲一区二区福利视频| 亚洲日本电影在线| 国产精品毛片久久久久久久av| 日韩有码在线观看| 国产精品xnxxcom| 欧美在线观看黄| 成人网在线播放| 日韩无码精品一区二区三区| 日韩av网址在线| 桃色一区二区| 亚洲图片都市激情| 久久99精品国产麻豆婷婷洗澡| 亚洲熟女毛茸茸| 精品久久久久久无| 精品人人视频| 欧美一级二级三级九九九| 日韩成人dvd| 亚洲伦理一区二区三区| 日韩一区二区三区视频在线观看| 日韩激情av| 久久av免费一区| 热久久一区二区| 国产探花在线免费观看| 亚洲高清免费观看高清完整版| 日本免费一区二区六区| 天堂av一区二区| 国产精品18久久久久| 日韩黄色在线播放| 日韩中文娱乐网| 视频国产精品| 国产成人a亚洲精v品无码| 中文字幕不卡的av| 超碰在线观看99| 欧美一区二区色| 99久久99久久精品国产片果冰| av地址在线观看| 日本韩国欧美三级| av在线网址观看| 日本不卡一区| 国产综合成人久久大片91| 91看片在线播放| 丝袜美腿精品国产二区| 国产在线播放精品| 视频二区在线播放| 午夜精品免费在线观看| 二区三区在线播放| 国产一区二区不卡视频| 美日韩一区二区三区| 国产精品久久久久久久妇| 中文字幕亚洲一区在线观看| 网站一区二区| 超碰在线播放91| 午夜精品久久久久久久99樱桃| 国产视频第一区| 国产一区免费观看| 精品一区二区免费看| 国产一级片毛片| 久久99精品国产99久久6尤物|