久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【zip导出】下载导出包含图片,excel,pdf的zip压缩包

發(fā)布時(shí)間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【zip导出】下载导出包含图片,excel,pdf的zip压缩包 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

工具類(lèi)

package com.sapit.compensation.moudle;import java.awt.Color; import java.awt.Rectangle; import java.awt.geom.Rectangle2D; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.sl.usermodel.PictureData.PictureType; import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xslf.usermodel.XMLSlideShow; import org.apache.poi.xslf.usermodel.XSLFPictureData; import org.apache.poi.xslf.usermodel.XSLFPictureShape; import org.apache.poi.xslf.usermodel.XSLFSlide; import org.apache.poi.xslf.usermodel.XSLFTextBox; import org.apache.poi.xslf.usermodel.XSLFTextParagraph; import org.apache.poi.xslf.usermodel.XSLFTextRun; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFColor; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import com.alibaba.fastjson.JSONObject; import com.sapit.compensation.common.util.Base64Util; import com.sapit.compensation.common.util.FileUtilsExt; import com.sapit.compensation.common.util.TimestampTool; import com.sapit.compensation.common.util.ZipUtils; import com.sapit.compensation.moudle.business.architectureAnalysis.SchemeAnalysis; import com.sapit.compensation.moudle.business.data.CompensationAnalysis;/*** <p>文件名稱(chēng): DownloadEcharsAndData.java </p> * <p>類(lèi)型描述: [分析頁(yè)面下載功能] </p>* <p>創(chuàng)建時(shí)間: 2022年5月23日 </p>* @author jlk* @version V1.0*/ public class DownloadEcharsAndData {private static Logger logger = LoggerFactory.getLogger(com.sapit.compensation.common.util.FileUtilsExt.class);/*** @Description: 下載zip* @param <map>* @param <HttpServletResponse>* @Author:jlk* @CreateTime:2022-05-24* @throws IOException */@SuppressWarnings("all")public static void downloadZip(HashMap map, HttpServletRequest request, HttpServletResponse response) throws IOException {String path = request.getSession().getServletContext().getRealPath("upload");String fileName = UUID.randomUUID().toString();File file = new File(path + File.separator + fileName);response.setContentType("application/zip");response.setCharacterEncoding("utf-8");response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(map.get("name").toString(), "UTF-8"));OutputStream outs = response.getOutputStream();try {if (file.mkdirs()) {logger.debug("生成文件夾成功", file.toString());}//excel生成String excelPath = "";//initCellMaxTextLength();if (map.get("customerPositionClass") != null) {excelPath = writeExcelCustomerPositionClass(file, map);} else {excelPath = writeExcel(file, map);}//轉(zhuǎn)碼圖片List<String> imgPathList = base64ToJpg(file, map);//打包zipList<File> fileList = new ArrayList<>();if (CollectionUtils.isNotEmpty(imgPathList)) {for (int i = 0; i < imgPathList.size(); i++) {fileList.add(new File(imgPathList.get(i)));}}if (StringUtils.isNoneBlank(excelPath))fileList.add(new File(excelPath));ZipUtils.toZip(fileList, outs);} catch (Exception e) {logger.debug("錯(cuò)誤", e);} finally {outs.flush();outs.close();FileUtilsExt.delFile(file.toString());}}/*** @Description: base64轉(zhuǎn)換jpg* @param <File>* @param <HashMap>* @throws IOException * @Author:jlk* @CreateTime:2022-05-24*/@SuppressWarnings("all")public static List<String> base64ToJpg(File file, HashMap map) throws IOException {List<String> imgPathList = new ArrayList<String>();if (map.get("baseImg") != null) {List<String> imgList = (List<String>) map.get("baseImg");for (int i = 0; i < imgList.size(); i++) {String base64 = imgList.get(i);if (StringUtils.isNotBlank(base64)) {String imgPathName = file.toString() + File.separator + map.get("name") + "_圖表_" + i;String imgPath = Base64Util.generateImage(base64, imgPathName);imgPathList.add(imgPath);}}return imgPathList;}return imgPathList;}/*** @Description: excel* @param <File>* @param <HashMap>* @Author:jlk* @CreateTime:2022-05-24*/@SuppressWarnings("all")public static String writeExcel(File file, HashMap map) throws IOException {//服務(wù)器路徑+文件名String excelPath = file.toString() + file.separator + map.get("name") + ".xlsx";FileOutputStream fout = new FileOutputStream(excelPath);try {//獲取數(shù)據(jù)源List<List<String>> dataList = (List<List<String>>) map.get("dataList");List<List<String>> colorList = (List<List<String>>) map.get("colorList");List<List<String>> titleList = (List<List<String>>) map.get("titleList");List<List<String>> echarsList = (List<List<String>>) map.get("echarsList");List<List<String>> dataRatioList = (List<List<String>>) map.get("dataRatioList");List<List<String>> colorRatioList = (List<List<String>>) map.get("colorRatioList");//創(chuàng)建excelXSSFWorkbook wb = new XSSFWorkbook();XSSFRow row = null;XSSFCell cell = null;// 創(chuàng)建新的sheet對(duì)象(excel的表單) 并設(shè)置sheet名字XSSFSheet sheet = wb.createSheet(map.get("name").toString());sheet.setDefaultRowHeightInPoints(20);sheet.setDefaultColumnWidth(12);XSSFCellStyle titleStyle = getTitleStyle(wb);XSSFCellStyle echarsStyle = getEcharsStyle(wb);XSSFCellStyle cellNoColorStyle = getNoColorStyle(wb);Font cellFont = wb.createFont();cellFont.setItalic(false); // 設(shè)置字體為斜體字 cellFont.setFontHeightInPoints((short) 10); // 將字體大小設(shè)置為9px cellFont.setFontName("宋體"); // 字體應(yīng)用到當(dāng)前單元格上 cellNoColorStyle.setFont(cellFont);cellNoColorStyle.setWrapText(true);//設(shè)置自動(dòng)換行// ------------------處理數(shù)據(jù)/start---------------------//表頭int rowNum = 0;if (CollectionUtils.isNotEmpty(titleList)) {for (int i = 0; i < titleList.size(); i++) {int MergedCount = 0;int beginIndex = 0;int endIndex = 0;row = sheet.createRow(rowNum);rowNum++;List<String> titles = titleList.get(i);for (int j = 0; j < titles.size(); j++) {String content = titles.get(j);cell = row.createCell(j);cell.setCellValue("" + content + "");cell.setCellStyle(titleStyle);if (j > 0 && j < titles.size()) {if (content.equals(titles.get(j - 1)) && StringUtils.isNotBlank(content)) {MergedCount++;if (MergedCount == 1) {beginIndex = j - 1;}if (j == titles.size() - 1) {endIndex = j;sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), beginIndex, endIndex));}} else if (!content.equals(titles.get(j - 1)) && MergedCount > 0 && j == titles.size() - 1) {endIndex = j - 1;sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), beginIndex, endIndex));}}if (i > 0 && i < titleList.size()) {String contentRow = titleList.get(i - 1).get(j);if (i > 0 && i < titleList.size() && contentRow.equals(titles.get(j))) {sheet.addMergedRegion(new CellRangeAddress(row.getRowNum() - 1, row.getRowNum(), j, j));}}}}}//表格數(shù)據(jù)if (CollectionUtils.isNotEmpty(colorList)) {for (int i = 0; i < dataList.size(); i++) {row = sheet.createRow(rowNum);rowNum++;List<String> rowColorList = colorList.get(i);List<String> rowList = dataList.get(i);for (int j = 0; j < rowList.size(); j++) {cell = row.createCell(j);cell.setCellValue("" + rowList.get(j) + "");XSSFCellStyle cellColorStyle = wb.createCellStyle();String color = rowColorList.get(j);cellColorStyle.setAlignment(HorizontalAlignment.CENTER);cellColorStyle.setVerticalAlignment(VerticalAlignment.CENTER);cellColorStyle.setBorderBottom(BorderStyle.THIN);//下邊框 cellColorStyle.setBorderLeft(BorderStyle.THIN);//左邊框 cellColorStyle.setBorderRight(BorderStyle.THIN);//右邊框 cellColorStyle.setBorderTop(BorderStyle.THIN);//上邊框cellColorStyle.setFont(cellFont);cellColorStyle.setWrapText(true);//設(shè)置自動(dòng)換行cellColorStyle.setFillForegroundColor(new XSSFColor(new Color(colorToFloat(color)[0], colorToFloat(color)[1], colorToFloat(color)[2])));cellColorStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);cell.setCellStyle(cellColorStyle);}}} else {for (int i = 0; i < dataList.size(); i++) {row = sheet.createRow(rowNum);rowNum++;List<String> rowList = dataList.get(i);for (int j = 0; j < rowList.size(); j++) {cell = row.createCell(j);cell.setCellValue("" + rowList.get(j) + "");cell.setCellStyle(cellNoColorStyle);}}}if (CollectionUtils.isNotEmpty(dataRatioList)) {rowNum = rowNum + 5;if (CollectionUtils.isNotEmpty(titleList)) {for (int i = 0; i < titleList.size(); i++) {int MergedCount = 0;int beginIndex = 0;int endIndex = 0;row = sheet.createRow(rowNum);rowNum++;List<String> titles = titleList.get(i);for (int j = 0; j < titles.size(); j++) {String content = titles.get(j);cell = row.createCell(j);cell.setCellValue("" + content + "");cell.setCellStyle(titleStyle);if (j > 0 && j < titles.size()) {if (content.equals(titles.get(j - 1)) && StringUtils.isNotBlank(content)) {MergedCount++;if (MergedCount == 1) {beginIndex = j - 1;}if (j == titles.size() - 1) {endIndex = j;sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), beginIndex, endIndex));}} else if (!content.equals(titles.get(j - 1)) && MergedCount > 0 && j == titles.size() - 1) {endIndex = j - 1;sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), beginIndex, endIndex));}}if (i > 0 && i < titleList.size()) {String contentRow = titleList.get(i - 1).get(j);if (i > 0 && i < titleList.size() && contentRow.equals(titles.get(j))) {sheet.addMergedRegion(new CellRangeAddress(row.getRowNum() - 1, row.getRowNum(), j, j));}}}}}//表格二數(shù)據(jù)if (CollectionUtils.isNotEmpty(colorRatioList)) {for (int i = 0; i < dataRatioList.size(); i++) {row = sheet.createRow(rowNum);rowNum++;List<String> rowColorList = colorRatioList.get(i);List<String> rowList = dataRatioList.get(i);for (int j = 0; j < rowList.size(); j++) {cell = row.createCell(j);cell.setCellValue("" + rowList.get(j) + "");XSSFCellStyle cellColorStyle = wb.createCellStyle();String color = rowColorList.get(j);cellColorStyle.setAlignment(HorizontalAlignment.CENTER);cellColorStyle.setVerticalAlignment(VerticalAlignment.CENTER);cellColorStyle.setBorderBottom(BorderStyle.THIN);//下邊框 cellColorStyle.setBorderLeft(BorderStyle.THIN);//左邊框 cellColorStyle.setBorderRight(BorderStyle.THIN);//右邊框 cellColorStyle.setBorderTop(BorderStyle.THIN);//上邊框cellColorStyle.setFont(cellFont);cellColorStyle.setWrapText(true);//設(shè)置自動(dòng)換行cellColorStyle.setFillForegroundColor(new XSSFColor(new Color(colorToFloat(color)[0], colorToFloat(color)[1], colorToFloat(color)[2])));cellColorStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);cell.setCellStyle(cellColorStyle);}}} else {for (int i = 0; i < dataRatioList.size(); i++) {row = sheet.createRow(rowNum);rowNum++;List<String> rowList = dataRatioList.get(i);for (int j = 0; j < rowList.size(); j++) {cell = row.createCell(j);cell.setCellValue("" + rowList.get(j) + "");cell.setCellStyle(cellNoColorStyle);}}}}//echars數(shù)據(jù)if (rowNum != 0) {rowNum = rowNum + 5;}if (CollectionUtils.isNotEmpty(echarsList)) {for (int i = 0; i < echarsList.size(); i++) {List<String> echars = echarsList.get(i);if (CollectionUtils.isNotEmpty(echars)) {for (int j = 0; j < echars.size(); j++) {row = sheet.createRow(rowNum);String content = echars.get(j);if (StringUtils.isNoneBlank(content)) {int max = 32767;int len = content.length();int num = content.length() / max;for (int k = 0; k <= num; k++) {if (k == num) {cell = row.createCell(k);cell.setCellValue("" + content.substring(k * max, len) + "");cell.setCellStyle(echarsStyle);} else {cell = row.createCell(k);cell.setCellValue("" + content.substring(k * max, (k + 1) * max) + "");cell.setCellStyle(echarsStyle);}}}rowNum++;}}}}// ------------------處理數(shù)據(jù)end--------------------------------------wb.write(fout);fout.close();} catch (Exception e) {e.printStackTrace();} finally {}return excelPath;}/*** @Description: rgb顏色值轉(zhuǎn)換* @param <String>* @Author:jlk* @CreateTime:2022-05-24*/@SuppressWarnings("all")public static Integer[] colorToFloat(String color) {Integer[] rgb = Arrays.stream(color.split(",")).map(s -> {s = s.trim();return Integer.parseInt(s);}).toArray(Integer[]::new);return rgb;}/*** @Description: 下載PPT* @param <map>* @param <HttpServletResponse>* @Author:jlk* @CreateTime:2022-05-24* @throws IOException */@SuppressWarnings("all")public static void downloadPPT(String customerName, List<CompensationAnalysis> CompensationAnalysisList, HttpServletRequest request,HttpServletResponse response) throws IOException {String path = request.getSession().getServletContext().getRealPath("upload");String fileName = UUID.randomUUID().toString();File file = new File(path + File.separator + fileName);if (file.mkdirs()) {logger.debug("生成文件夾成功", file.toString());}response.reset();response.setContentType("application/zip");response.setCharacterEncoding("utf-8");response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(customerName + "_薪酬分析圖表_" + TimestampTool.getDate(new Date()), "UTF-8"));OutputStream outs = response.getOutputStream();//創(chuàng)建pptXMLSlideShow ppt = new XMLSlideShow();File pptPath = new File(file + File.separator + customerName + "_薪酬分析圖表_" + TimestampTool.getDate(new Date()) + ".pptx");Map<Integer, String> dataMap = new HashMap<>();FileOutputStream pptbaos = new FileOutputStream(pptPath);//創(chuàng)建excelXSSFWorkbook wb = new XSSFWorkbook();File excelPath = new File(file + File.separator + customerName + "_薪酬分析圖表_" + TimestampTool.getDate(new Date()) + ".xlsx");FileOutputStream excelbaos = new FileOutputStream(excelPath);boolean isppt = false;boolean isexcel = false;try {for (int j = 0; j < CompensationAnalysisList.size(); j++) {String base64 = CompensationAnalysisList.get(j).getAnalysisImage();String data = CompensationAnalysisList.get(j).getAnalysisData();String name = CompensationAnalysisList.get(j).getAnalysisTopicName();if (StringUtils.isNotBlank(base64)) {XSLFSlide slide = ppt.createSlide();XSLFTextBox shape1 = slide.createTextBox();Rectangle anchor = new Rectangle(30, 30, 300, 50);shape1.setAnchor(anchor);XSLFTextParagraph p1 = shape1.addNewTextParagraph();XSLFTextRun r1 = p1.addNewTextRun();r1.setFontSize(14.00);r1.setFontColor(Color.black);//shape1.setFillColor(Color.red); r1.setText(name);// 圖片文件String imgPathName = file.toString() + File.separator + CompensationAnalysisList.get(j).getAnalysisTopicName();String imgPath = Base64Util.generateImage(base64, imgPathName);File image = new File(imgPath);//測(cè)試用本地圖片//File image = new File("E://plief.jpg");// 圖片文件輸入流FileInputStream imageFis = new FileInputStream(image);// 獲取圖片大小int len = (int) image.length();// 創(chuàng)建一個(gè)字節(jié)數(shù)組,數(shù)組大小與圖片文件大小一致byte[] imageData = new byte[len];// 將圖片數(shù)據(jù)讀進(jìn)字節(jié)數(shù)組中int pictureData = imageFis.read(imageData);// 將圖片添加到PPT中XSLFPictureData pd = ppt.addPicture(imageData, PictureType.PNG);// 將圖片放到指定的幻燈片中XSLFPictureShape pic = slide.createPicture(pd);// 設(shè)置圖片框的放置的位置和大小pic.setAnchor(new Rectangle2D.Double(100, 160, 520, 200));isppt = true;imageFis.close();}if (StringUtils.isNotBlank(data)) {JSONObject object = JSONObject.parseObject(data);writeExcel(object, wb);isexcel = true;}}ppt.write(pptbaos);wb.write(excelbaos);List<File> fileList = new ArrayList<>();if (isppt)fileList.add(pptPath);if (isexcel)fileList.add(excelPath);ZipUtils.toZip(fileList, outs);} catch (Exception e) {logger.debug("錯(cuò)誤", e);} finally {pptbaos.flush();pptbaos.close();excelbaos.flush();excelbaos.close();outs.flush();outs.close();FileUtilsExt.delFile(file.toString());}}public static byte[] File2byte(File tradeFile) {byte[] buffer = null;try {FileInputStream fis = new FileInputStream(tradeFile);ByteArrayOutputStream bos = new ByteArrayOutputStream();byte[] b = new byte[1024];int n;while ((n = fis.read(b)) != -1) {bos.write(b, 0, n);}fis.close();bos.close();buffer = bos.toByteArray();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return buffer;}public static XSLFSlide copySlide(XSLFSlide slide) {XSLFSlide newSlide = slide.getSlideShow().createSlide(slide.getSlideLayout());newSlide.appendContent(slide);return newSlide;}/*** @Description: excel* @param <File>* @param <HashMap>* @Author:jlk* @CreateTime:2022-05-24*/@SuppressWarnings("all")public static XSSFWorkbook writeExcel(JSONObject jsonObject, XSSFWorkbook wb) throws IOException {try {//獲取數(shù)據(jù)源List<List<String>> dataList = (List<List<String>>) jsonObject.get("dataList");List<List<String>> colorList = (List<List<String>>) jsonObject.get("colorList");List<List<String>> titleList = (List<List<String>>) jsonObject.get("titleList");List<List<String>> echarsList = (List<List<String>>) jsonObject.get("echarsList");List<List<String>> dataRatioList = (List<List<String>>) jsonObject.get("dataRatioList");List<List<String>> colorRatioList = (List<List<String>>) jsonObject.get("colorRatioList");XSSFRow row = null;XSSFCell cell = null;// 創(chuàng)建新的sheet對(duì)象(excel的表單) 并設(shè)置sheet名字XSSFSheet sheet = wb.createSheet(jsonObject.get("name").toString());sheet.setDefaultRowHeightInPoints(20);sheet.setDefaultColumnWidth(12);XSSFCellStyle titleStyle = getTitleStyle(wb);XSSFCellStyle echarsStyle = getEcharsStyle(wb);XSSFCellStyle cellNoColorStyle = getNoColorStyle(wb);Font cellFont = wb.createFont();cellFont.setItalic(false); // 設(shè)置字體為斜體字 cellFont.setFontHeightInPoints((short) 10); // 將字體大小設(shè)置為9px cellFont.setFontName("宋體"); // 字體應(yīng)用到當(dāng)前單元格上 cellNoColorStyle.setFont(cellFont);cellNoColorStyle.setWrapText(true);//設(shè)置自動(dòng)換行// ------------------處理數(shù)據(jù)/start---------------------//表頭int rowNum = 0;if (CollectionUtils.isNotEmpty(titleList)) {for (int i = 0; i < titleList.size(); i++) {int MergedCount = 0;int beginIndex = 0;int endIndex = 0;row = sheet.createRow(rowNum);rowNum++;List<String> titles = titleList.get(i);for (int j = 0; j < titles.size(); j++) {String content = titles.get(j);cell = row.createCell(j);cell.setCellValue("" + content + "");cell.setCellStyle(titleStyle);if (j > 0 && j < titles.size()) {if (content.equals(titles.get(j - 1)) && StringUtils.isNotBlank(content)) {MergedCount++;if (MergedCount == 1) {beginIndex = j - 1;}if (j == titles.size() - 1) {endIndex = j;sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), beginIndex, endIndex));}} else if (!content.equals(titles.get(j - 1)) && MergedCount > 0 && j == titles.size() - 1) {endIndex = j - 1;sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), beginIndex, endIndex));}}if (i > 0 && i < titleList.size()) {String contentRow = titleList.get(i - 1).get(j);if (i > 0 && i < titleList.size() && contentRow.equals(titles.get(j))) {sheet.addMergedRegion(new CellRangeAddress(row.getRowNum() - 1, row.getRowNum(), j, j));}}}}}//表格數(shù)據(jù)if (CollectionUtils.isNotEmpty(colorList)) {for (int i = 0; i < dataList.size(); i++) {row = sheet.createRow(rowNum);rowNum++;List<String> rowColorList = colorList.get(i);List<String> rowList = dataList.get(i);for (int j = 0; j < rowList.size(); j++) {cell = row.createCell(j);cell.setCellValue("" + rowList.get(j) + "");XSSFCellStyle cellColorStyle = wb.createCellStyle();String color = rowColorList.get(j);cellColorStyle.setAlignment(HorizontalAlignment.CENTER);cellColorStyle.setVerticalAlignment(VerticalAlignment.CENTER);cellColorStyle.setBorderBottom(BorderStyle.THIN);//下邊框 cellColorStyle.setBorderLeft(BorderStyle.THIN);//左邊框 cellColorStyle.setBorderRight(BorderStyle.THIN);//右邊框 cellColorStyle.setBorderTop(BorderStyle.THIN);//上邊框cellColorStyle.setFont(cellFont);cellColorStyle.setWrapText(true);//設(shè)置自動(dòng)換行cellColorStyle.setFillForegroundColor(new XSSFColor(new Color(colorToFloat(color)[0], colorToFloat(color)[1], colorToFloat(color)[2])));cellColorStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);cell.setCellStyle(cellColorStyle);}}} else {for (int i = 0; i < dataList.size(); i++) {row = sheet.createRow(rowNum);rowNum++;List<String> rowList = dataList.get(i);for (int j = 0; j < rowList.size(); j++) {cell = row.createCell(j);cell.setCellValue("" + rowList.get(j) + "");cell.setCellStyle(cellNoColorStyle);}}}if (CollectionUtils.isNotEmpty(dataRatioList)) {rowNum = rowNum + 5;if (CollectionUtils.isNotEmpty(titleList)) {for (int i = 0; i < titleList.size(); i++) {int MergedCount = 0;int beginIndex = 0;int endIndex = 0;row = sheet.createRow(rowNum);rowNum++;List<String> titles = titleList.get(i);for (int j = 0; j < titles.size(); j++) {String content = titles.get(j);cell = row.createCell(j);cell.setCellValue("" + content + "");cell.setCellStyle(titleStyle);if (j > 0 && j < titles.size()) {if (content.equals(titles.get(j - 1)) && StringUtils.isNotBlank(content)) {MergedCount++;if (MergedCount == 1) {beginIndex = j - 1;}if (j == titles.size() - 1) {endIndex = j;sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), beginIndex, endIndex));}} else if (!content.equals(titles.get(j - 1)) && MergedCount > 0 && j == titles.size() - 1) {endIndex = j - 1;sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), beginIndex, endIndex));}}if (i > 0 && i < titleList.size()) {String contentRow = titleList.get(i - 1).get(j);if (i > 0 && i < titleList.size() && contentRow.equals(titles.get(j))) {sheet.addMergedRegion(new CellRangeAddress(row.getRowNum() - 1, row.getRowNum(), j, j));}}}}}//表格二數(shù)據(jù)if (CollectionUtils.isNotEmpty(colorRatioList)) {for (int i = 0; i < dataRatioList.size(); i++) {row = sheet.createRow(rowNum);rowNum++;List<String> rowColorList = colorRatioList.get(i);List<String> rowList = dataRatioList.get(i);for (int j = 0; j < rowList.size(); j++) {cell = row.createCell(j);cell.setCellValue("" + rowList.get(j) + "");XSSFCellStyle cellColorStyle = wb.createCellStyle();String color = rowColorList.get(j);cellColorStyle.setAlignment(HorizontalAlignment.CENTER);cellColorStyle.setVerticalAlignment(VerticalAlignment.CENTER);cellColorStyle.setBorderBottom(BorderStyle.THIN);//下邊框 cellColorStyle.setBorderLeft(BorderStyle.THIN);//左邊框 cellColorStyle.setBorderRight(BorderStyle.THIN);//右邊框 cellColorStyle.setBorderTop(BorderStyle.THIN);//上邊框cellColorStyle.setFont(cellFont);cellColorStyle.setWrapText(true);//設(shè)置自動(dòng)換行cellColorStyle.setFillForegroundColor(new XSSFColor(new Color(colorToFloat(color)[0], colorToFloat(color)[1], colorToFloat(color)[2])));cellColorStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);cell.setCellStyle(cellColorStyle);}}} else {for (int i = 0; i < dataRatioList.size(); i++) {row = sheet.createRow(rowNum);rowNum++;List<String> rowList = dataRatioList.get(i);for (int j = 0; j < rowList.size(); j++) {cell = row.createCell(j);cell.setCellValue("" + rowList.get(j) + "");cell.setCellStyle(cellNoColorStyle);}}}}//echars數(shù)據(jù)if (rowNum != 0) {rowNum = rowNum + 5;}if (CollectionUtils.isNotEmpty(echarsList)) {for (int i = 0; i < echarsList.size(); i++) {List<String> echars = echarsList.get(i);if (CollectionUtils.isNotEmpty(echars)) {for (int j = 0; j < echars.size(); j++) {row = sheet.createRow(rowNum);//單元格超32767報(bào)錯(cuò)問(wèn)題修改String content = echars.get(j);if (StringUtils.isNoneBlank(content)) {int max = 32767;int len = content.length();int num = content.length() / max;for (int k = 0; k <= num; k++) {if (k == num) {cell = row.createCell(k);cell.setCellValue("" + content.substring(k * max, len) + "");cell.setCellStyle(echarsStyle);} else {cell = row.createCell(k);cell.setCellValue("" + content.substring(k * max, (k + 1) * max) + "");cell.setCellStyle(echarsStyle);}}}rowNum++;}}}}// ------------------處理數(shù)據(jù)end--------------------------------------} catch (Exception e) {logger.debug("錯(cuò)誤", e);} finally {}return wb;}/*** @Description: 職級(jí)圖excel* @param <File>* @param <HashMap>* @Author:jlk* @CreateTime:2022-05-24*/@SuppressWarnings("all")public static String writeExcelCustomerPositionClass(File file, HashMap map) throws IOException {//服務(wù)器路徑+文件名String excelPath = file.toString() + file.separator + map.get("name") + ".xlsx";FileOutputStream fout = new FileOutputStream(excelPath);try {//獲取數(shù)據(jù)源List<Map> dataList = (List<Map>) map.get("dataList");List<Map> titleList = (List<Map>) map.get("titleList");//創(chuàng)建excelXSSFWorkbook wb = new XSSFWorkbook();XSSFRow row = null;XSSFCell cell = null;// 創(chuàng)建新的sheet對(duì)象(excel的表單) 并設(shè)置sheet名字XSSFSheet sheet = wb.createSheet(map.get("name").toString());sheet.setDefaultRowHeightInPoints(20);sheet.setDefaultColumnWidth(12);XSSFCellStyle titleStyle = getTitleStyle(wb);XSSFCellStyle cellNoColorStyle = getNoColorStyle(wb);// ------------------處理數(shù)據(jù)/start---------------------//表頭int rowNum = 0;List headTitles = new ArrayList();if (CollectionUtils.isNotEmpty(titleList)) {row = sheet.createRow(rowNum);XSSFRow rowSecondLevel = sheet.createRow(rowNum + 1);XSSFCell cellSecondLevel = null;int cellBegin = 0;int cellEnd = 0;for (int i = 0; i < titleList.size(); i++) {Map titles = (Map) titleList.get(i);if ("customerPositionClass.text".equals(titles.get("dataIndex"))) {String title = (String) titles.get("title");cell = row.createCell(i);cell.setCellValue("" + title + "");sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum() + 1, i, i));cell.setCellStyle(titleStyle);cellBegin = cellBegin + 1;headTitles.add(titles.get("dataIndex"));cellSecondLevel = rowSecondLevel.createCell(i);cellSecondLevel.setCellStyle(titleStyle);} else if ("mercerPositionClass.text".equals(titles.get("dataIndex"))) {String title = (String) titles.get("title");cell = row.createCell(i);cell.setCellValue("" + title + "");sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum() + 1, i, i));cell.setCellStyle(titleStyle);cellBegin = cellBegin + 1;headTitles.add(titles.get("dataIndex"));cellSecondLevel = rowSecondLevel.createCell(i);cellSecondLevel.setCellStyle(titleStyle);} else {String title = (String) titles.get("title");cell = row.createCell(cellBegin);cell.setCellValue("" + title + "");cell.setCellStyle(titleStyle);List<Map> childrenList = (List<Map>) titles.get("children");if (CollectionUtils.isNotEmpty(childrenList)) {for (int j = 0; j < childrenList.size(); j++) {String titleSecondLevel = (String) childrenList.get(j).get("title");cell = rowSecondLevel.createCell(cellBegin + j);cell.setCellValue("" + titleSecondLevel + "");cell.setCellStyle(titleStyle);headTitles.add((String) childrenList.get(j).get("dataIndex"));}if (childrenList.size() > 1) {cellEnd = cellBegin + childrenList.size() - 1;sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), cellBegin, cellEnd));cellBegin = cellEnd + 1;} else {cellBegin = cellBegin + 1;}}}}rowNum = rowNum + 2;if (CollectionUtils.isNotEmpty(dataList)) {for (int i = 0; i < dataList.size(); i++) {row = sheet.createRow(rowNum);Map dataMap = dataList.get(i);for (int j = 0; j < headTitles.size(); j++) {String key = headTitles.get(j).toString();String data = (String) dataMap.get(key.substring(0, key.lastIndexOf(".")));if (StringUtils.isBlank(data)) {data = "";}cell = row.createCell(j);cell.setCellValue("" + data + "");cell.setCellStyle(cellNoColorStyle);}rowNum++;}}}// ------------------處理數(shù)據(jù)end--------------------------------------wb.write(fout);fout.close();} catch (Exception e) {logger.debug("錯(cuò)誤", e);} finally {}return excelPath;}public static XSSFCellStyle getTitleStyle(XSSFWorkbook wb) {//----------------表頭格樣式----------------------------------XSSFCellStyle titleStyle = wb.createCellStyle(); //表格樣式titleStyle.setAlignment(HorizontalAlignment.CENTER);titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);titleStyle.setBorderBottom(BorderStyle.THIN);//下邊框 titleStyle.setBorderLeft(BorderStyle.THIN);//左邊框 titleStyle.setBorderRight(BorderStyle.THIN);//右邊框 titleStyle.setBorderTop(BorderStyle.THIN);//上邊框titleStyle.setFillForegroundColor(new XSSFColor(new Color(135, 192, 178)));titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);Font ztFont = wb.createFont();ztFont.setItalic(false); // 設(shè)置字體為斜體字 //ztFont.setColor(HSSFColor.WHITE.index); // 設(shè)置字體顏色-白色 ztFont.setColor(Font.COLOR_NORMAL);ztFont.setFontHeightInPoints((short) 10); // 將字體大小設(shè)置為10px ztFont.setFontName("宋體"); // 字體應(yīng)用到當(dāng)前單元格上 ztFont.setBold(true); //加粗titleStyle.setFont(ztFont);//titleStyle.setWrapText(true);//設(shè)置自動(dòng)換行//----------------------------------------------------------return titleStyle;}public static XSSFCellStyle getEcharsStyle(XSSFWorkbook wb) {//----------------Echars格樣式----------------------------------XSSFCellStyle echarsStyle = wb.createCellStyle(); //表格樣式//echarsStyle.setAlignment(HorizontalAlignment.CENTER);//echarsStyle.setVerticalAlignment(VerticalAlignment.CENTER);Font echarsFont = wb.createFont();echarsFont.setItalic(false); // 設(shè)置字體為斜體字 echarsFont.setColor(Font.COLOR_NORMAL); // 設(shè)置字體顏色echarsFont.setFontHeightInPoints((short) 10); // 將字體大小設(shè)置為10px echarsFont.setFontName("宋體"); // 字體應(yīng)用到當(dāng)前單元格上 echarsFont.setBold(false); //加粗echarsStyle.setFont(echarsFont);//echarsStyle.setWrapText(true);//設(shè)置自動(dòng)換行//----------------------------------------------------------return echarsStyle;}public static XSSFCellStyle getNoColorStyle(XSSFWorkbook wb) {//----------------無(wú)色普通格樣式----------------------------------XSSFCellStyle cellNoColorStyle = wb.createCellStyle();cellNoColorStyle.setAlignment(HorizontalAlignment.CENTER);cellNoColorStyle.setVerticalAlignment(VerticalAlignment.CENTER);cellNoColorStyle.setBorderBottom(BorderStyle.THIN);//下邊框 cellNoColorStyle.setBorderLeft(BorderStyle.THIN);//左邊框 cellNoColorStyle.setBorderRight(BorderStyle.THIN);//右邊框 cellNoColorStyle.setBorderTop(BorderStyle.THIN);//上邊框Font cellFont = wb.createFont();cellFont.setItalic(false); // 設(shè)置字體為斜體字 cellFont.setFontHeightInPoints((short) 10); // 將字體大小設(shè)置為9px cellFont.setFontName("宋體"); // 字體應(yīng)用到當(dāng)前單元格上 cellNoColorStyle.setFont(cellFont);cellNoColorStyle.setWrapText(true);//設(shè)置自動(dòng)換行//----------------------------------------------------------return cellNoColorStyle;}/*** 初始化 cell 內(nèi)容長(zhǎng)度* cell 原本內(nèi)容長(zhǎng)度限制 32767 現(xiàn)修改為Integer.MAX_VALUE* 未使用*/public static void initCellMaxTextLength() {SpreadsheetVersion excel2007 = SpreadsheetVersion.EXCEL2007;if (Integer.MAX_VALUE != excel2007.getMaxTextLength()) {Field field;try {field = excel2007.getClass().getDeclaredField("_maxTextLength");field.setAccessible(true);field.set(excel2007, Integer.MAX_VALUE);} catch (Exception e) {e.printStackTrace();}}}/*** @Description: excel* @param <File>* @param <HashMap>* @Author:jlk* @CreateTime:2022-05-24*/@SuppressWarnings("all")public static void exportExcelForPreviewCheck(HashMap map, HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode("方案預(yù)覽校驗(yàn)表", "UTF-8"));OutputStream outs = response.getOutputStream();try {//獲取數(shù)據(jù)源List<Map> columns = (List<Map>) map.get("columns");List<List<String>> data = (List<List<String>>) map.get("data");//創(chuàng)建excelHSSFWorkbook wb = new HSSFWorkbook();HSSFRow row = null;HSSFCell cell = null;// 創(chuàng)建新的sheet對(duì)象(excel的表單) 并設(shè)置sheet名字HSSFSheet sheet = wb.createSheet("方案預(yù)覽校驗(yàn)");sheet.setDefaultRowHeightInPoints(20);sheet.setDefaultColumnWidth(14);HSSFCellStyle cellNoColorStyle = wb.createCellStyle();cellNoColorStyle.setAlignment(HorizontalAlignment.CENTER);cellNoColorStyle.setVerticalAlignment(VerticalAlignment.CENTER);cellNoColorStyle.setBorderBottom(BorderStyle.THIN);//下邊框 cellNoColorStyle.setBorderLeft(BorderStyle.THIN);//左邊框 cellNoColorStyle.setBorderRight(BorderStyle.THIN);//右邊框 cellNoColorStyle.setBorderTop(BorderStyle.THIN);//上邊框Font cellFont = wb.createFont();cellFont.setItalic(false); // 設(shè)置字體為斜體字 cellFont.setFontHeightInPoints((short) 10); // 將字體大小設(shè)置為9px cellFont.setFontName("宋體"); // 字體應(yīng)用到當(dāng)前單元格上 cellNoColorStyle.setFont(cellFont);cellNoColorStyle.setWrapText(true);//設(shè)置自動(dòng)換行// ------------------處理數(shù)據(jù)/start---------------------//表頭int rowNum = 0;if (CollectionUtils.isNotEmpty(columns)) {row = sheet.createRow(rowNum);for (int i = 0; i < columns.size(); i++) {Map column = columns.get(i);cell = row.createCell(i);cell.setCellValue("" + column.get("title") + "");cell.setCellStyle(cellNoColorStyle);}rowNum++;}if (CollectionUtils.isNotEmpty(data)) {for (int i = 0; i < data.size(); i++) {row = sheet.createRow(rowNum);List<String> cellData = data.get(i);for (int j = 0; j < cellData.size(); j++) {cell = row.createCell(j);cell.setCellValue("" + cellData.get(j) + "");cell.setCellStyle(cellNoColorStyle);}rowNum++;}}// ------------------處理數(shù)據(jù)end--------------------------------------wb.write(outs);outs.close();} catch (Exception e) {e.printStackTrace();} }/*** @Description: 下載PPT* @param <map>* @param <HttpServletResponse>* @Author:jlk* @CreateTime:2022-05-24* @throws IOException*/@SuppressWarnings("all")public static void downloadSchemeAnalysesPPT(String customerName, List<SchemeAnalysis> schemeAnalyses, HttpServletRequest request,HttpServletResponse response) throws IOException {String path = request.getSession().getServletContext().getRealPath("upload");String fileName = UUID.randomUUID().toString();File file = new File(path + File.separator + fileName);if (file.mkdirs()) {logger.debug("生成文件夾成功", file.toString());}response.reset();response.setContentType("application/zip");response.setCharacterEncoding("utf-8");response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(customerName + "_分析圖表_" + TimestampTool.getDate(new Date()), "UTF-8"));OutputStream outs = response.getOutputStream();//創(chuàng)建pptXMLSlideShow ppt = new XMLSlideShow();File pptPath = new File(file + File.separator + customerName + "_分析圖表_" + TimestampTool.getDate(new Date()) + ".pptx");Map<Integer, String> dataMap = new HashMap<>();FileOutputStream pptbaos = new FileOutputStream(pptPath);//創(chuàng)建excelXSSFWorkbook wb = new XSSFWorkbook();File excelPath = new File(file + File.separator + customerName + "_分析圖表_" + TimestampTool.getDate(new Date()) + ".xlsx");FileOutputStream excelbaos = new FileOutputStream(excelPath);boolean isppt = false;boolean isexcel = false;try {for (int j = 0; j < schemeAnalyses.size(); j++) {String base64 = schemeAnalyses.get(j).getAnalysisImage();String data = schemeAnalyses.get(j).getAnalysisData();String name = schemeAnalyses.get(j).getAnalysisTopicName();if (StringUtils.isNotBlank(base64)) {XSLFSlide slide = ppt.createSlide();XSLFTextBox shape1 = slide.createTextBox();Rectangle anchor = new Rectangle(30, 30, 300, 50);shape1.setAnchor(anchor);XSLFTextParagraph p1 = shape1.addNewTextParagraph();XSLFTextRun r1 = p1.addNewTextRun();r1.setFontSize(14.00);r1.setFontColor(Color.black);//shape1.setFillColor(Color.red);r1.setText(name);// 圖片文件String imgPathName = file.toString() + File.separator + schemeAnalyses.get(j).getAnalysisTopicName();String imgPath = Base64Util.generateImage(base64, imgPathName);File image = new File(imgPath);//測(cè)試用本地圖片//File image = new File("E://plief.jpg");// 圖片文件輸入流FileInputStream imageFis = new FileInputStream(image);// 獲取圖片大小int len = (int) image.length();// 創(chuàng)建一個(gè)字節(jié)數(shù)組,數(shù)組大小與圖片文件大小一致byte[] imageData = new byte[len];// 將圖片數(shù)據(jù)讀進(jìn)字節(jié)數(shù)組中int pictureData = imageFis.read(imageData);// 將圖片添加到PPT中XSLFPictureData pd = ppt.addPicture(imageData, PictureType.PNG);// 將圖片放到指定的幻燈片中XSLFPictureShape pic = slide.createPicture(pd);// 設(shè)置圖片框的放置的位置和大小pic.setAnchor(new Rectangle2D.Double(100, 160, 520, 200));isppt = true;imageFis.close();}if (StringUtils.isNotBlank(data)) {JSONObject object = JSONObject.parseObject(data);writeExcel(object, wb);isexcel = true;}}ppt.write(pptbaos);wb.write(excelbaos);List<File> fileList = new ArrayList<>();if (isppt)fileList.add(pptPath);if (isexcel)fileList.add(excelPath);ZipUtils.toZip(fileList, outs);} catch (Exception e) {logger.debug("錯(cuò)誤", e);} finally {pptbaos.flush();pptbaos.close();excelbaos.flush();excelbaos.close();outs.flush();outs.close();FileUtilsExt.delFile(file.toString());}}}

zip 工具類(lèi)

package com.sapit.compensation.common.util; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream;/*** ZipUtils* @author 季連科* @date 2022年5月23日 下午7:16:08* @version v1.0*/ public class ZipUtils {private static final int BUFFER_SIZE = 2 * 1024;/*** 壓縮成ZIP 方法1* @param srcDir 壓縮文件夾路徑 * @param out 壓縮文件輸出流* @param KeepDirStructure 是否保留原來(lái)的目錄結(jié)構(gòu),true:保留目錄結(jié)構(gòu); * false:所有文件跑到壓縮包根目錄下(注意:不保留目錄結(jié)構(gòu)可能會(huì)出現(xiàn)同名文件,會(huì)壓縮失敗)* @throws RuntimeException 壓縮失敗會(huì)拋出運(yùn)行時(shí)異常*/public static void toZip(String srcDir, OutputStream out, boolean KeepDirStructure)throws RuntimeException{long start = System.currentTimeMillis();ZipOutputStream zos = null ;try {zos = new ZipOutputStream(out);File sourceFile = new File(srcDir);compress(sourceFile,zos,sourceFile.getName(),KeepDirStructure);long end = System.currentTimeMillis();System.out.println("壓縮完成,耗時(shí):" + (end - start) +" ms");} catch (Exception e) {throw new RuntimeException("zip error from ZipUtils",e);}finally{if(zos != null){try {zos.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 壓縮成ZIP 方法2* @param srcFiles 需要壓縮的文件列表* @param out 壓縮文件輸出流* @throws RuntimeException 壓縮失敗會(huì)拋出運(yùn)行時(shí)異常*/public static void toZip(List<File> srcFiles , OutputStream out)throws RuntimeException {long start = System.currentTimeMillis();ZipOutputStream zos = null ;try {zos = new ZipOutputStream(out);for (File srcFile : srcFiles) {byte[] buf = new byte[BUFFER_SIZE];zos.putNextEntry(new ZipEntry(srcFile.getName()));int len;FileInputStream in = new FileInputStream(srcFile);while ((len = in.read(buf)) != -1){zos.write(buf, 0, len);}zos.closeEntry();in.close();}long end = System.currentTimeMillis();System.out.println("壓縮完成,耗時(shí):" + (end - start) +" ms");} catch (Exception e) {throw new RuntimeException("zip error from ZipUtils",e);}finally{if(zos != null){try {zos.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 遞歸壓縮方法* @param sourceFile 源文件* @param zos zip輸出流* @param name 壓縮后的名稱(chēng)* @param KeepDirStructure 是否保留原來(lái)的目錄結(jié)構(gòu),true:保留目錄結(jié)構(gòu); * false:所有文件跑到壓縮包根目錄下(注意:不保留目錄結(jié)構(gòu)可能會(huì)出現(xiàn)同名文件,會(huì)壓縮失敗)* @throws Exception*/private static void compress(File sourceFile, ZipOutputStream zos, String name,boolean KeepDirStructure) throws Exception{byte[] buf = new byte[BUFFER_SIZE];if(sourceFile.isFile()){// 向zip輸出流中添加一個(gè)zip實(shí)體,構(gòu)造器中name為zip實(shí)體的文件的名字zos.putNextEntry(new ZipEntry(name));// copy文件到zip輸出流中int len;FileInputStream in = new FileInputStream(sourceFile);while ((len = in.read(buf)) != -1){zos.write(buf, 0, len);}// Complete the entryzos.closeEntry();in.close();} else {File[] listFiles = sourceFile.listFiles();if(listFiles == null || listFiles.length == 0){// 需要保留原來(lái)的文件結(jié)構(gòu)時(shí),需要對(duì)空文件夾進(jìn)行處理if(KeepDirStructure){// 空文件夾的處理zos.putNextEntry(new ZipEntry(name + "/"));// 沒(méi)有文件,不需要文件的copyzos.closeEntry();}}else {for (File file : listFiles) {// 判斷是否需要保留原來(lái)的文件結(jié)構(gòu)if (KeepDirStructure) {// 注意:file.getName()前面需要帶上父文件夾的名字加一斜杠,// 不然最后壓縮包中就不能保留原來(lái)的文件結(jié)構(gòu),即:所有文件都跑到壓縮包根目錄下了compress(file, zos, name + "/" + file.getName(),KeepDirStructure);} else {compress(file, zos, file.getName(),KeepDirStructure);}}}}}public static void main(String[] args) throws Exception {/** 測(cè)試壓縮方法1 */FileOutputStream fos1 = new FileOutputStream(new File("c:/mytest01.zip"));ZipUtils.toZip("D:/log", fos1,true);/** 測(cè)試壓縮方法2 */List<File> fileList = new ArrayList<>();fileList.add(new File("D:/Java/jdk1.7.0_45_64bit/bin/jar.exe"));fileList.add(new File("D:/Java/jdk1.7.0_45_64bit/bin/java.exe"));FileOutputStream fos2 = new FileOutputStream(new File("c:/mytest02.zip"));ZipUtils.toZip(fileList, fos2);}public static void zipFile(File inputFile, ZipOutputStream zipoutputStream) {FileInputStream fis = null;BufferedInputStream bis = null;try {if (inputFile.exists()) { // 判斷文件是否存在if (inputFile.isFile()) { // 如果是文件// 創(chuàng)建輸入流讀取文件fis = new FileInputStream(inputFile);bis = new BufferedInputStream(fis);// 將文件寫(xiě)入zip壓縮包內(nèi)ZipEntry zip =new ZipEntry(inputFile.getParentFile().getName() + File.separator + inputFile.getName()); //獲取文件名zipoutputStream.putNextEntry(zip);// 進(jìn)行寫(xiě)入文件byte[] bytes = new byte[1024];long fileLength = 0;while (fileLength < inputFile.length()) {int count = bis.read(bytes, 0, 1024);fileLength += count;zipoutputStream.write(bytes, 0, count);}// 關(guān)閉輸入輸出流if (bis != null) {bis.close();}if (fis != null) {fis.close();}} else { // 如果是文件夾,則使用窮舉的方法獲取文件,寫(xiě)入ziptry {zipoutputStream.putNextEntry(new ZipEntry(inputFile.getName() + File.separator));File[] files = inputFile.listFiles();for (int i = 0; i < files.length; i++) {zipFile(files[i], zipoutputStream);}} catch (Exception e) {e.printStackTrace();}}}} catch (Exception e) {e.printStackTrace();} finally {try {if (bis != null) {bis.close();}if (fis != null) {fis.close();}} catch (IOException e) {e.printStackTrace();}}} }

base64轉(zhuǎn)碼工具類(lèi)

package com.sapit.compensation.common.util;import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Base64;import org.apache.commons.lang3.StringUtils;/*** <p>文件名稱(chēng): Base64Util.java </p> * <p>類(lèi)型描述: [base64處理工具] </p>* <p>創(chuàng)建時(shí)間: 2022年5月23日 </p>* @author jlk* @version V1.0*/ public class Base64Util {/*** <p>功能描述: [解碼] </p>* @Title decode* @param str base64編碼* @return byte[]*/public static byte[] decode(String str) {return Base64.getDecoder().decode(str);}/*** <p>功能描述: [編碼] </p>* @Title encode* @param bytes 需要轉(zhuǎn)換的bytes.* @return String*/public static String encode(byte[] bytes) {return Base64.getEncoder().encodeToString(bytes);}/*** <p>功能描述: [將base64轉(zhuǎn)成文件] </p>* @Title toFile* @param str* @param filePath* @return boolean*/public static boolean toFile(String str, String filePath) {if (StringUtils.isEmpty(str)||StringUtils.isEmpty(filePath)) {return false;}OutputStream out=null;try {// Base64解碼byte[] b = decode(str);for (int i = 0; i < b.length; ++i) {// 調(diào)整異常數(shù)據(jù)if (b[i] < 0) {b[i] += 256;}}// 生成jpeg圖片F(xiàn)ile file = new File(filePath);if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}out = new FileOutputStream(file);out.write(b);out.flush();return true;} catch (Exception e) {return false;}finally {if(out!=null) {try {out.close();} catch (IOException e) {}}}}/*** @Description: 將base64編碼字符串轉(zhuǎn)換為圖片* @Author:* @CreateTime:* @param file base64編碼字符串* @param path 圖片路徑-具體到文件* @return* @throws IOException */public static String generateImage(String file, String path) throws IOException {// 解密OutputStream out = null;try {// 項(xiàng)目絕對(duì)路徑// 圖片分類(lèi)路徑+圖片名+圖片后綴String imgClassPath = path.concat(".jpg");// 解密Base64.Decoder decoder = Base64.getDecoder();// 去掉base64前綴 data:image/jpeg;base64,file = file.substring(file.indexOf(",", 1) + 1, file.length());byte[] b = decoder.decode(file);// 處理數(shù)據(jù)for (int i = 0; i < b.length; ++i) {if (b[i] < 0) {b[i] += 256;}}// 保存圖片out = new FileOutputStream(imgClassPath);out.write(b);// 返回圖片的相對(duì)路徑 = 圖片分類(lèi)路徑+圖片名+圖片后綴return imgClassPath;} catch (IOException e) {return null;}finally {out.flush();out.close();}}}

文件工具類(lèi)

package com.sapit.compensation.common.util;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream;import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import com.google.common.collect.Lists;/*** 文件操作工具類(lèi) 實(shí)現(xiàn)文件的創(chuàng)建、刪除、復(fù)制、壓縮、解壓以及目錄的創(chuàng)建、刪除、復(fù)制、壓縮解壓等功能** @author aoyuan* @version 2015-3-16*/ public class FileUtilsExt extends org.apache.commons.io.FileUtils {private static final String HTML = "html";private static final String HTM = "htm";private static final String SHTML = "shtml";private static final String APK = "apk";private static final String SIS = "sis";private static final String SISX = "sisx";private static final String EXE = "exe";private static final String MSI = "msi";private static final String CSS = "css";private static final String XML = "xml";private static final String GIF = "gif";private static final String JPEG = "jpeg";private static final String JPG = "jpg";private static final String JS = "js";private static final String ATOM = "atom";private static final String RSS = "rss";private static final String MML = "mml";private static final String TXT = "txt";private static final String JAD = "jad";private static final String WML = "wml";private static final String HTC = "htc";private static final String PNG = "png";private static final String TIF = "tif";private static final String TIFF = "tiff";private static final String WBMP = "wbmp";private static final String ICO = "ico";private static final String JNG = "jng";private static final String BMP = "bmp";private static final String SVG = "svg";private static final String JAR = "jar";private static final String VAR = "var";private static final String EAR = "ear";private static final String DOC = "doc";private static final String PDF = "pdf";private static final String RTF = "rtf";private static final String XLS = "xls";private static final String PPT = "ppt";private static final String SEVEN_Z = "7z";private static final String RAR = "rar";private static final String SWF = "swf";private static final String RPM = "rpm";private static final String DER = "der";private static final String PEM = "pem";private static final String CRT = "crt";private static final String XHTML = "xhtml";private static final String ZIP = "zip";private static final String MID = "mid";private static final String MIDI = "midi";private static final String KAR = "kar";private static final String MP3 = "mp3";private static final String OGG = "ogg";private static final String M4A = "m4a";private static final String RA = "ra";private static final String THREE_GPP = "3gpp";private static final String THREE_GP = "3gp";private static final String MP4 = "mp4";private static final String MPEG = "mpeg";private static final String MPG = "mpg";private static final String MOV = "mov";private static final String FLV = "flv";private static final String M4V = "m4v";private static final String MNG = "pem";private static final String ASX = "asx";private static final String ASF = "asf";private static final String WMV = "wmv";private static final String AVI = "avi";private static Logger logger = LoggerFactory.getLogger(com.sapit.compensation.common.util.FileUtilsExt.class);/*** 復(fù)制單個(gè)文件,如果目標(biāo)文件存在,則不覆蓋** @param srcFileName 待復(fù)制的文件名* @param descFileName 目標(biāo)文件名* @return 如果復(fù)制成功,則返回true,否則返回false*/public static boolean copyFile(String srcFileName, String descFileName) {return com.sapit.compensation.common.util.FileUtilsExt.copyFileCover(srcFileName, descFileName, false);}/*** 復(fù)制單個(gè)文件** @param srcFileName 待復(fù)制的文件名* @param descFileName 目標(biāo)文件名* @param coverlay 如果目標(biāo)文件已存在,是否覆蓋* @return 如果復(fù)制成功,則返回true,否則返回false*/public static boolean copyFileCover(String srcFileName, String descFileName, boolean coverlay) {File srcFile = new File(srcFileName);// 判斷源文件是否存在if (!srcFile.exists()) {logger.debug("復(fù)制文件失敗,源文件 {} 不存在!", srcFileName);return false;}// 判斷源文件是否是合法的文件else if (!srcFile.isFile()) {logger.debug("復(fù)制文件失敗,{} 不是一個(gè)文件!", srcFileName);return false;}File descFile = new File(descFileName);// 判斷目標(biāo)文件是否存在if (descFile.exists()) {// 如果目標(biāo)文件存在,并且允許覆蓋if (coverlay) {logger.debug("目標(biāo)文件已存在,準(zhǔn)備刪除!");if (!com.sapit.compensation.common.util.FileUtilsExt.delFile(descFileName)) {logger.debug("刪除目標(biāo)文件 {} 失敗!", descFileName);return false;}} else {logger.debug("復(fù)制文件失敗,目標(biāo)文件{} 已存在!", descFileName);return false;}} else {if (!descFile.getParentFile().exists()) {// 如果目標(biāo)文件所在的目錄不存在,則創(chuàng)建目錄logger.debug("目標(biāo)文件所在的目錄不存在,創(chuàng)建目錄!");// 創(chuàng)建目標(biāo)文件所在的目錄if (!descFile.getParentFile().mkdirs()) {logger.debug("創(chuàng)建目標(biāo)文件所在的目錄失敗!");return false;}}}// 準(zhǔn)備復(fù)制文件// 讀取的位數(shù)int readByte = 0;InputStream ins = null;OutputStream outs = null;try {// 打開(kāi)源文件ins = new FileInputStream(srcFile);// 打開(kāi)目標(biāo)文件的輸出流outs = new FileOutputStream(descFile);byte[] buf = new byte[1024];// 一次讀取1024個(gè)字節(jié),當(dāng)readByte為-1時(shí)表示文件已經(jīng)讀取完畢while ((readByte = ins.read(buf)) != -1) {// 將讀取的字節(jié)流寫(xiě)入到輸出流outs.write(buf, 0, readByte);}logger.info("復(fù)制單個(gè)文件{} 到 {} 成功!", srcFileName, descFileName);return true;} catch (Exception e) {logger.info("復(fù)制文件失敗:{}", e.getMessage());return false;} finally {// 關(guān)閉輸入輸出流,首先關(guān)閉輸出流,然后再關(guān)閉輸入流if (outs != null) {try {outs.close();} catch (IOException oute) {logger.info(oute.getMessage());}}if (ins != null) {try {ins.close();} catch (IOException ine) {logger.info(ine.getMessage());}}}}/*** 復(fù)制整個(gè)目錄的內(nèi)容,如果目標(biāo)目錄存在,則不覆蓋** @param srcDirName 源目錄名* @param descDirName 目標(biāo)目錄名* @return 如果復(fù)制成功返回true,否則返回false*/public static boolean copyDirectory(String srcDirName, String descDirName) {return com.sapit.compensation.common.util.FileUtilsExt.copyDirectoryCover(srcDirName, descDirName, false);}/*** 復(fù)制整個(gè)目錄的內(nèi)容** @param srcDirName 源目錄名* @param descDirName 目標(biāo)目錄名* @param coverlay 如果目標(biāo)目錄存在,是否覆蓋* @return 如果復(fù)制成功返回true,否則返回false*/public static boolean copyDirectoryCover(String srcDirName, String descDirName, boolean coverlay) {File srcDir = new File(srcDirName);// 判斷源目錄是否存在if (!srcDir.exists()) {logger.debug("復(fù)制目錄失敗,源目錄 {} 不存在!", srcDirName);return false;}// 判斷源目錄是否是目錄else if (!srcDir.isDirectory()) {logger.debug("復(fù)制目錄失敗,{} 不是一個(gè)目錄!", srcDirName);return false;}// 如果目標(biāo)文件夾名不以文件分隔符結(jié)尾,自動(dòng)添加文件分隔符String descDirNames = descDirName;if (!descDirNames.endsWith(File.separator)) {descDirNames = descDirNames + File.separator;}File descDir = new File(descDirNames);// 如果目標(biāo)文件夾存在if (descDir.exists()) {if (coverlay) {// 允許覆蓋目標(biāo)目錄logger.debug("目標(biāo)目錄已存在,準(zhǔn)備刪除!");if (!com.sapit.compensation.common.util.FileUtilsExt.delFile(descDirNames)) {logger.debug("刪除目錄 {} 失敗!", descDirNames);return false;}} else {logger.debug("目標(biāo)目錄復(fù)制失敗,目標(biāo)目錄 {} 已存在!", descDirNames);return false;}} else {// 創(chuàng)建目標(biāo)目錄logger.debug("目標(biāo)目錄不存在,準(zhǔn)備創(chuàng)建!");if (!descDir.mkdirs()) {logger.debug("創(chuàng)建目標(biāo)目錄失敗!");return false;}}boolean flag = true;// 列出源目錄下的所有文件名和子目錄名File[] files = srcDir.listFiles();for (int i = 0; i < files.length; i++) {// 如果是一個(gè)單個(gè)文件,則直接復(fù)制if (files[i].isFile()) {flag = com.sapit.compensation.common.util.FileUtilsExt.copyFile(files[i].getAbsolutePath(), descDirName + files[i].getName());// 如果拷貝文件失敗,則退出循環(huán)if (!flag) {break;}}// 如果是子目錄,則繼續(xù)復(fù)制目錄if (files[i].isDirectory()) {flag = com.sapit.compensation.common.util.FileUtilsExt.copyDirectory(files[i].getAbsolutePath(), descDirName + files[i].getName());// 如果拷貝目錄失敗,則退出循環(huán)if (!flag) {break;}}}if (!flag) {logger.debug("復(fù)制目錄 {} 到 {} 失敗!", srcDirName, descDirName);return false;}logger.debug("復(fù)制目錄 {} 到 {} 成功!", srcDirName, descDirName);return true;}/*** 刪除文件,可以刪除單個(gè)文件或文件夾** @param fileName 被刪除的文件名* @return 如果刪除成功,則返回true,否是返回false*/public static boolean delFile(String fileName) {File file = new File(fileName);if (!file.exists()) {logger.debug("{} 文件不存在!", fileName);return true;} else {if (file.isFile()) {return com.sapit.compensation.common.util.FileUtilsExt.deleteFile(fileName);} else {return com.sapit.compensation.common.util.FileUtilsExt.deleteDirectory(fileName);}}}/*** 刪除單個(gè)文件** @param fileName 被刪除的文件名* @return 如果刪除成功,則返回true,否則返回false*/public static boolean deleteFile(String fileName) {File file = new File(fileName);if (file.exists() && file.isFile()) {if (file.delete()) {logger.debug("刪除文件 {} 成功!", fileName);return true;} else {logger.debug("刪除文件 {} 失敗!", fileName);return false;}} else {logger.debug("{} 文件不存在!", fileName);return true;}}/*** 刪除目錄及目錄下的文件** @param dirName 被刪除的目錄所在的文件路徑* @return 如果目錄刪除成功,則返回true,否則返回false*/public static boolean deleteDirectory(String dirName) {String dirNames = dirName;if (!dirNames.endsWith(File.separator)) {dirNames = dirNames + File.separator;}File dirFile = new File(dirNames);if (!dirFile.exists() || !dirFile.isDirectory()) {logger.debug("{} 目錄不存在!", dirNames);return true;}boolean flag = true;// 列出全部文件及子目錄File[] files = dirFile.listFiles();for (int i = 0; i < files.length; i++) {// 刪除子文件if (files[i].isFile()) {flag = com.sapit.compensation.common.util.FileUtilsExt.deleteFile(files[i].getAbsolutePath());// 如果刪除文件失敗,則退出循環(huán)if (!flag) {break;}}// 刪除子目錄else if (files[i].isDirectory()) {flag = com.sapit.compensation.common.util.FileUtilsExt.deleteDirectory(files[i].getAbsolutePath());// 如果刪除子目錄失敗,則退出循環(huán)if (!flag) {break;}}}if (!flag) {logger.debug("刪除目錄失敗!");return false;}// 刪除當(dāng)前目錄if (dirFile.delete()) {logger.debug("刪除目錄 {} 成功!", dirName);return true;} else {logger.debug("刪除目錄 {} 失敗!", dirName);return false;}}/*** 創(chuàng)建單個(gè)文件** @param descFileName 文件名,包含路徑* @return 如果創(chuàng)建成功,則返回true,否則返回false*/public static boolean createFile(String descFileName) {File file = new File(descFileName);if (file.exists()) {logger.debug("文件{} 已存在!", descFileName);return false;}if (descFileName.endsWith(File.separator)) {logger.debug("{} 為目錄,不能創(chuàng)建目錄!", descFileName);return false;}if (!file.getParentFile().exists() && !file.getParentFile().mkdirs()) {// 如果文件所在的目錄不存在,則創(chuàng)建目錄logger.debug("創(chuàng)建文件所在的目錄失敗!");return false;}// 創(chuàng)建文件try {if (file.createNewFile()) {logger.debug("{} 文件創(chuàng)建成功!", descFileName);return true;} else {logger.info("{} 文件創(chuàng)建失敗!", descFileName);return false;}} catch (Exception e) {logger.info("{} 文件創(chuàng)建失敗!", descFileName);return false;}}/*** 創(chuàng)建目錄** @param descDirName 目錄名,包含路徑* @return 如果創(chuàng)建成功,則返回true,否則返回false*/public static boolean createDirectory(String descDirName) {String descDirNames = descDirName;if (!descDirNames.endsWith(File.separator)) {descDirNames = descDirNames + File.separator;}File descDir = new File(descDirNames);if (descDir.exists()) {logger.debug("目錄 {} 已存在!", descDirNames);return false;}// 創(chuàng)建目錄if (descDir.mkdirs()) {logger.debug("目錄 {} 創(chuàng)建成功!", descDirNames);return true;} else {logger.debug("目錄 {} 創(chuàng)建失敗!", descDirNames);return false;}}/*** 寫(xiě)入文件** @param fileName* @param content* @param append*/public static void writeToFile(String fileName, String content, boolean append) {try {org.apache.commons.io.FileUtils.write(new File(fileName), content, "utf-8", append);logger.debug("文件 {} 寫(xiě)入成功!", fileName);} catch (IOException e) {logger.info("文件 {} 寫(xiě)入失敗! {}", fileName, e.getMessage());}}/*** 寫(xiě)入文件** @param fileName* @param content* @param encoding* @param append*/public static void writeToFile(String fileName, String content, String encoding, boolean append) {try {org.apache.commons.io.FileUtils.write(new File(fileName), content, encoding, append);logger.debug("文件 {} 寫(xiě)入成功!", fileName);} catch (IOException e) {logger.info("文件 {} 寫(xiě)入失敗! {}", fileName, e.getMessage());}}/*** 壓縮文件或目錄** @param srcDirName 壓縮的根目錄* @param fileName 根目錄下的待壓縮的文件名或文件夾名,其中*或""表示跟目錄下的全部文件* @param descFileName 目標(biāo)zip文件*/public static void zipFiles(String srcDirName, String fileName, String descFileName) {// 判斷目錄是否存在if (srcDirName == null) {logger.debug("文件壓縮失敗,目錄 {} 不存在! ", srcDirName);return;}File fileDir = new File(srcDirName);if (!fileDir.exists() || !fileDir.isDirectory()) {logger.debug("文件壓縮失敗,目錄 {} 不存在! ", srcDirName);return;}String dirPath = fileDir.getAbsolutePath();File descFile = new File(descFileName);FileOutputStream fos = null;ZipOutputStream zouts = null;try {fos = new FileOutputStream(descFile);zouts = new ZipOutputStream(fos);if ("*".equals(fileName) || "".equals(fileName)) {com.sapit.compensation.common.util.FileUtilsExt.zipDirectoryToZipFile(dirPath, fileDir, zouts);} else {File file = new File(fileDir, fileName);if (file.isFile()) {com.sapit.compensation.common.util.FileUtilsExt.zipFilesToZipFile(dirPath, file, zouts);} else {com.sapit.compensation.common.util.FileUtilsExt.zipDirectoryToZipFile(dirPath, file, zouts);}}logger.debug("{} 文件壓縮成功!", descFileName);} catch (Exception e) {logger.info("文件壓縮失敗: {}", e.getMessage());} finally {IOUtils.closeQuietly(fos);IOUtils.closeQuietly(zouts);}}/*** 將目錄壓縮到ZIP輸出流** @param dirPath 目錄路徑* @param fileDir 文件信息* @param zouts 輸出流*/public static void zipDirectoryToZipFile(String dirPath, File fileDir, ZipOutputStream zouts) {if (fileDir.isDirectory()) {File[] files = fileDir.listFiles();// 空的文件夾if (files.length == 0) {// 目錄信息ZipEntry entry = new ZipEntry(getEntryName(dirPath, fileDir));try {zouts.putNextEntry(entry);zouts.closeEntry();} catch (Exception e) {logger.info("異常", e);}return;}for (int i = 0; i < files.length; i++) {if (files[i].isFile()) {// 如果是文件,則調(diào)用文件壓縮方法com.sapit.compensation.common.util.FileUtilsExt.zipFilesToZipFile(dirPath, files[i], zouts);} else {// 如果是目錄,則遞歸調(diào)用com.sapit.compensation.common.util.FileUtilsExt.zipDirectoryToZipFile(dirPath, files[i], zouts);}}}}/*** 將文件壓縮到ZIP輸出流** @param dirPath 目錄路徑* @param file 文件* @param zouts 輸出流*/public static void zipFilesToZipFile(String dirPath, File file, ZipOutputStream zouts) {FileInputStream fin = null;ZipEntry entry;// 創(chuàng)建復(fù)制緩沖區(qū)byte[] buf = new byte[4096];int readByte;if (file.isFile()) {try {// 創(chuàng)建一個(gè)文件輸入流fin = new FileInputStream(file);// 創(chuàng)建一個(gè)ZipEntryentry = new ZipEntry(getEntryName(dirPath, file));// 存儲(chǔ)信息到壓縮文件zouts.putNextEntry(entry);// 復(fù)制字節(jié)到壓縮文件while ((readByte = fin.read(buf)) != -1) {zouts.write(buf, 0, readByte);}zouts.closeEntry();fin.close();logger.info("添加文件{} 到zip文件中!", file.getAbsolutePath());} catch (Exception e) {logger.info("異常", e);} finally {IOUtils.closeQuietly(fin);}}}/*** 獲取待壓縮文件在ZIP文件中entry的名字,即相對(duì)于跟目錄的相對(duì)路徑名** @param dirPath 目錄名* @param file entry文件名* @return*/private static String getEntryName(String dirPath, File file) {String dirPaths = dirPath;if (!dirPaths.endsWith(File.separator)) {dirPaths = dirPaths + File.separator;}String filePath = file.getAbsolutePath();// 對(duì)于目錄,必須在entry名字后面加上"/",表示它將以目錄項(xiàng)存儲(chǔ)if (file.isDirectory()) {filePath += "/";}int index = filePath.indexOf(dirPaths);return filePath.substring(index + dirPaths.length());}/*** 根據(jù)“文件名的后綴”獲取文件內(nèi)容類(lèi)型(而非根據(jù)File.getContentType()讀取的文件類(lèi)型)** @param returnFileName 帶驗(yàn)證的文件名* @return 返回文件類(lèi)型*/public static String getContentType(String returnFileName) {String contentType = "application/octet-stream";if (returnFileName.lastIndexOf('.') < 0) {return contentType;}returnFileName = returnFileName.toLowerCase();returnFileName = returnFileName.substring(returnFileName.lastIndexOf('.') + 1);if (returnFileName.equals(HTML) || returnFileName.equals(HTM) || returnFileName.equals(SHTML)) {contentType = "text/html";} else if (returnFileName.equals(APK)) {contentType = "application/vnd.android.package-archive";} else if (returnFileName.equals(SIS) || returnFileName.equals(SISX)) {contentType = "application/vnd.symbian.install";} else if (returnFileName.equals(EXE) || returnFileName.equals(MSI)) {contentType = "application/x-msdownload";} else if (returnFileName.equals(CSS)) {contentType = "text/css";} else if (returnFileName.equals(XML)) {contentType = "text/xml";} else if (returnFileName.equals(GIF)) {contentType = "image/gif";} else if (returnFileName.equals(JPEG) || returnFileName.equals(JPG)) {contentType = "image/jpeg";} else if (returnFileName.equals(JS)) {contentType = "application/x-javascript";} else if (returnFileName.equals(ATOM)) {contentType = "application/atom+xml";} else if (returnFileName.equals(RSS)) {contentType = "application/rss+xml";} else if (returnFileName.equals(MML)) {contentType = "text/mathml";} else if (returnFileName.equals(TXT)) {contentType = "text/plain";} else if (returnFileName.equals(JAD)) {contentType = "text/vnd.sun.j2me.app-descriptor";} else if (returnFileName.equals(WML)) {contentType = "text/vnd.wap.wml";} else if (returnFileName.equals(HTC)) {contentType = "text/x-component";} else if (returnFileName.equals(PNG)) {contentType = "image/png";} else if (returnFileName.equals(TIF) || returnFileName.equals(TIFF)) {contentType = "image/tiff";} else if (returnFileName.equals(WBMP)) {contentType = "image/vnd.wap.wbmp";} else if (returnFileName.equals(ICO)) {contentType = "image/x-icon";} else if (returnFileName.equals(JNG)) {contentType = "image/x-jng";} else if (returnFileName.equals(BMP)) {contentType = "image/x-ms-bmp";} else if (returnFileName.equals(SVG)) {contentType = "image/svg+xml";} else if (returnFileName.equals(JAR) || returnFileName.equals(VAR) || returnFileName.equals(EAR)) {contentType = "application/java-archive";} else if (returnFileName.equals(DOC)) {contentType = "application/msword";} else if (returnFileName.equals(PDF)) {contentType = "application/pdf";} else if (returnFileName.equals(RTF)) {contentType = "application/rtf";} else if (returnFileName.equals(XLS)) {contentType = "application/vnd.ms-excel";} else if (returnFileName.equals(PPT)) {contentType = "application/vnd.ms-powerpoint";} else if (returnFileName.equals(SEVEN_Z)) {contentType = "application/x-7z-compressed";} else if (returnFileName.equals(RAR)) {contentType = "application/x-rar-compressed";} else if (returnFileName.equals(SWF)) {contentType = "application/x-shockwave-flash";} else if (returnFileName.equals(RPM)) {contentType = "application/x-redhat-package-manager";} else if (returnFileName.equals(DER) || returnFileName.equals(PEM) || returnFileName.equals(CRT)) {contentType = "application/x-x509-ca-cert";} else if (returnFileName.equals(XHTML)) {contentType = "application/xhtml+xml";} else if (returnFileName.equals(ZIP)) {contentType = "application/zip";} else if (returnFileName.equals(MID) || returnFileName.equals(MIDI) || returnFileName.equals(KAR)) {contentType = "audio/midi";} else if (returnFileName.equals(MP3)) {contentType = "audio/mpeg";} else if (returnFileName.equals(OGG)) {contentType = "audio/ogg";} else if (returnFileName.equals(M4A)) {contentType = "audio/x-m4a";} else if (returnFileName.equals(RA)) {contentType = "audio/x-realaudio";} else if (returnFileName.equals(THREE_GPP) || returnFileName.equals(THREE_GP)) {contentType = "video/3gpp";} else if (returnFileName.equals(MP4)) {contentType = "video/mp4";} else if (returnFileName.equals(MPEG) || returnFileName.equals(MPG)) {contentType = "video/mpeg";} else if (returnFileName.equals(MOV)) {contentType = "video/quicktime";} else if (returnFileName.equals(FLV)) {contentType = "video/x-flv";} else if (returnFileName.equals(M4V)) {contentType = "video/x-m4v";} else if (returnFileName.equals(MNG)) {contentType = "video/x-mng";} else if (returnFileName.equals(ASX) || returnFileName.equals(ASF)) {contentType = "video/x-ms-asf";} else if (returnFileName.equals(WMV)) {contentType = "video/x-ms-wmv";} else if (returnFileName.equals(AVI)) {contentType = "video/x-msvideo";}return contentType;}/*** 修正路徑,將 \\ 或 / 等替換為 File.separator** @param path 待修正的路徑* @return 修正后的路徑*/public static String path(String path) {String p = org.apache.commons.lang3.StringUtils.replace(path, "\\", "/");p = org.apache.commons.lang3.StringUtils.join(org.apache.commons.lang3.StringUtils.split(p, "/"), "/");if (!org.apache.commons.lang3.StringUtils.startsWithAny(p, "/") && org.apache.commons.lang3.StringUtils.startsWithAny(path, "\\", "/")) {p += "/";}if (!org.apache.commons.lang3.StringUtils.endsWithAny(p, "/") && org.apache.commons.lang3.StringUtils.endsWithAny(path, "\\", "/")) {p = p + "/";}if (path != null && path.startsWith("/")) {p = "/" + p; // linux下路徑}return p;}/*** 獲目錄下的文件列表** @param dir 搜索目錄* @param searchDirs 是否是搜索目錄* @return 文件列表*/public static List<String> findChildrenList(File dir, boolean searchDirs) {List<String> files = Lists.newArrayList();for (String subFiles : dir.list()) {File file = new File(dir, subFiles);if (((searchDirs) && (file.isDirectory())) || ((!searchDirs) && (!file.isDirectory()))) {files.add(file.getName());}}return files;}/*** 獲取文件擴(kuò)展名(返回小寫(xiě))** @param fileName 文件名* @return 例如:test.jpg 返回: jpg*/public static String getFileExtension(String fileName) {if ((fileName == null) || (fileName.lastIndexOf('.') == -1) || (fileName.lastIndexOf('.') == fileName.length() - 1)) {return null;}return org.apache.commons.lang3.StringUtils.lowerCase(fileName.substring(fileName.lastIndexOf('.') + 1));}/*** 獲取文件名,不包含擴(kuò)展名** @param fileName 文件名* @return 例如:d:\files\test.jpg 返回:d:\files\test*/public static String getFileNameWithoutExtension(String fileName) {if ((fileName == null) || (fileName.lastIndexOf('.') == -1)) {return null;}return fileName.substring(0, fileName.lastIndexOf('.'));}/*** <p>功能描述: [自動(dòng)創(chuàng)建多層目錄](méi) </p>* @Title mkdirs* @param destPath*/public static void mkdirs(String destPath) {File file = new File(destPath);// 當(dāng)文件夾不存在時(shí),mkdirs會(huì)自動(dòng)創(chuàng)建多層目錄,區(qū)別于mkdir.(mkdir如果父目錄不存在則會(huì)拋出異常)if (!file.exists() && !file.isDirectory()) {file.mkdirs();}} }

時(shí)間戳工具類(lèi)

package com.sapit.compensation.common.util;import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;public final class TimestampTool {private static String formatter = "yyyy-MM-dd";private static Logger logger = LoggerFactory.getLogger(TimestampTool.class);private TimestampTool() {throw new IllegalStateException("Utility class");}// 當(dāng)前時(shí)間public static Timestamp crunttime() {return new Timestamp(System.currentTimeMillis());}// 獲取當(dāng)前時(shí)間的字符串 2006-07-07public static String getCurrentDate() {Timestamp d = crunttime();return d.toString().substring(0, 10);}// 獲取當(dāng)前時(shí)間的字符串 2006-07-07 22:10:10public static String getCurrentDateTime() {Timestamp d = crunttime();return d.toString().substring(0, 19);}// 獲取給定時(shí)間的字符串,只有日期 2006-07-07public static String getStrDate(Timestamp t) {return t.toString().substring(0, 10);}// 獲取給定時(shí)間的字符串,只有日期 20060707public static String getStringDate() {Timestamp t = crunttime();return t.toString().substring(0, 10).replace("-", "");}// 獲取給定時(shí)間的字符串 2006-07-07 22:10:10public static String getStrDateTime(Timestamp t) {return t.toString().substring(0, 19);}// 獲取當(dāng)前日期之前的日期字符串 如 2007-04-15 前5月 就是 2006-11-15public static String getPreviousMonth(int month) {Calendar cal1 = Calendar.getInstance();cal1.setTime(new Date());cal1.add(Calendar.MONTH, -month);SimpleDateFormat format = new SimpleDateFormat(formatter);return format.format(cal1.getTime());}public static String getPreviousMonth(int month, String format) {Calendar cal1 = Calendar.getInstance();cal1.setTime(new Date());cal1.add(Calendar.MONTH, -month);SimpleDateFormat formatter = new SimpleDateFormat(format);return formatter.format(cal1.getTime());}public static String getPreviousMonth(Date date, int month) {Calendar cal1 = Calendar.getInstance();cal1.setTime(date);cal1.add(Calendar.MONTH, -month);SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return formatter.format(cal1.getTime());}/*** 日期月份加減** @param date Date* @param month 正數(shù):向前推xxx個(gè)月,負(fù)數(shù):向后推xxx個(gè)月* @return Date* @author YJH*/public static Date getPreviousMonthReturnDate(Date date, int month) {Calendar cal1 = Calendar.getInstance();cal1.setTime(date);cal1.add(Calendar.MONTH, -month);return cal1.getTime();}public static String getPreviousMonth(Date date, int month, String format) {Calendar cal1 = Calendar.getInstance();cal1.setTime(date);cal1.add(Calendar.MONTH, -month);SimpleDateFormat formatter = new SimpleDateFormat(format);return formatter.format(cal1.getTime());}// 獲取當(dāng)前日期之后的日期字符串 如 2007-04-15 后一天 就是 2007-04-16public static String getNextDay(int day) {Calendar cal1 = Calendar.getInstance();cal1.setTime(new Date());cal1.add(Calendar.DAY_OF_MONTH, day);SimpleDateFormat format = new SimpleDateFormat(formatter);return format.format(cal1.getTime());}public static Date getNextHour(int hour) {Calendar cal1 = Calendar.getInstance();cal1.setTime(new Date());cal1.add(Calendar.HOUR_OF_DAY, hour);return cal1.getTime();}public static Date getNextHour(Date date, int hour) {Calendar cal1 = Calendar.getInstance();cal1.setTime(date);cal1.add(Calendar.HOUR_OF_DAY, hour);return cal1.getTime();}public static Date getNextMinute(int minute) {Calendar cal1 = Calendar.getInstance();cal1.setTime(new Date());cal1.add(Calendar.MINUTE, minute);return cal1.getTime();}// 獲取指定日期之后的日期字符串 如 2007-04-15 后一天 就是 2007-04-16public static String getNextDay(String strDate, int day) {Calendar c = Calendar.getInstance();String[] string = strDate.trim().split("-");int one = Integer.parseInt(string[0]) - 1900;int two = Integer.parseInt(string[1]) - 1;int three = Integer.parseInt(string[2]);c.set(one, two, three);c.add(Calendar.DAY_OF_MONTH, day);SimpleDateFormat format = new SimpleDateFormat(formatter);return format.format(c.getTime());}public static Date getNextDay(Date date, int day) {Calendar cal = Calendar.getInstance();cal.setTime(date);cal.add(Calendar.DAY_OF_MONTH, day);return cal.getTime();}/*** 得到當(dāng)前的毫秒日期20120201165044734,17位字符串*/public static synchronized String getMillisecond() {return crunttime().toString().replace("-", "").replace(" ", "").replace(":", "").replace("\\.", "");}public static String getDate(Date date) {SimpleDateFormat sdf = new SimpleDateFormat(formatter);return sdf.format(date);}public static String getDateTime(Date date) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return sdf.format(date);}public static String formatDate(Date date, String format) {SimpleDateFormat sdf = new SimpleDateFormat(format);return sdf.format(date);}public static String format(String format) {SimpleDateFormat sdf = new SimpleDateFormat(format);return sdf.format(crunttime());}public static String getStringDate(Date date) {SimpleDateFormat sdf = new SimpleDateFormat(formatter);String dateStr = sdf.format(date);return dateStr.replace("-", "");}public static String dateStr(String date) {String dateStr = "";if (StringUtils.isNotBlank(date)) {dateStr = " to_date('" + date + " 00:00:00','yyyy-MM-dd HH24:mi:ss') ";}return dateStr;}/*** subtractDate:(得到兩個(gè)日期相減的結(jié)果)** @param @param minuend(被減數(shù))* @param @param subtrahend(減數(shù))* @param @param returnType(返回類(lèi)型:1-毫秒,2-秒,3-分,4-小時(shí),5-天,6-月,7-年)* @param @return* @return long DOM對(duì)象* @throws @since CodingExample Ver 1.1*/public static long subtractDate(Date minuend, Date subtrahend, int returnType) {long result = 0;long millionSecondsForMinuend = minuend.getTime();long millionSecondsForSubtrahend = subtrahend.getTime();long subtract = millionSecondsForMinuend - millionSecondsForSubtrahend;switch (returnType) {case 1:result = subtract;break;case 2:result = subtract / 1000;break;case 3:result = subtract / 1000 / 60;break;case 4:result = subtract / 1000 / 60 / 60;break;case 5:result = subtract / 1000 / 60 / 60 / 24;break;case 6:result = subtract / 1000 / 60 / 60 / 24 / 30;break;case 7:result = subtract / 1000 / 60 / 60 / 24 / 30 / 12;break;default:result = 0;}return result;}/*** 取得當(dāng)前日期是多少周** @param date* @return*/public static int getWeekOfYear(Date date) {Calendar c = Calendar.getInstance();c.setFirstDayOfWeek(Calendar.MONDAY);/*** 設(shè)置一年中第一個(gè)星期所需的最少天數(shù),例如,如果定義第一個(gè)星期包含一年第一個(gè)月的第一天,則使用值 1 調(diào)用此方法。* 如果最少天數(shù)必須是一整個(gè)星期,則使用值 7 調(diào)用此方法。**/c.setMinimalDaysInFirstWeek(1);c.setTime(date);return c.get(Calendar.WEEK_OF_YEAR);}/*** 得到某一年周的總數(shù)** @param year* @return*/public static int getMaxWeekNumOfYear(int year) {Calendar c = Calendar.getInstance();c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);return getWeekOfYear(c.getTime());}/*** 得到某年某周的第一天** @param year* @param week* @return*/public static Date getFirstDayOfWeek(int year, int week) {Calendar c = Calendar.getInstance();c.set(Calendar.YEAR, year);c.set(Calendar.WEEK_OF_YEAR, week);c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);// 設(shè)置周一c.setFirstDayOfWeek(Calendar.MONDAY);c.set(Calendar.HOUR_OF_DAY, 0);c.set(Calendar.MINUTE, 0);c.set(Calendar.SECOND, 0);c.set(Calendar.MILLISECOND, 0);return c.getTime();}/*** 得到某年某周的最后一天** @param year* @param week* @return*/public static Date getLastDayOfWeek(int year, int week) {Calendar c = Calendar.getInstance();c.set(Calendar.YEAR, year);c.set(Calendar.WEEK_OF_YEAR, week);c.setFirstDayOfWeek(Calendar.MONDAY);c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sundayc.set(Calendar.HOUR_OF_DAY, 0);c.set(Calendar.MINUTE, 0);c.set(Calendar.SECOND, 0);c.set(Calendar.MILLISECOND, 0);return c.getTime();}/*** 得到某年某月的第一天** @param year* @param month* @return*/public static Date getFirstDayOfMonth(int year, int month) {Calendar c = Calendar.getInstance();c.set(Calendar.YEAR, year);c.set(Calendar.MONTH, month - 1);c.set(Calendar.DAY_OF_MONTH, c.getActualMinimum(Calendar.DAY_OF_MONTH));c.set(Calendar.HOUR_OF_DAY, 0);c.set(Calendar.MINUTE, 0);c.set(Calendar.SECOND, 0);c.set(Calendar.MILLISECOND, 0);return c.getTime();}/*** 得到某年某月的最后一天** @param year* @param month* @return*/public static Date getLastDayOfMonth(int year, int month) {Calendar c = Calendar.getInstance();c.set(Calendar.YEAR, year);c.set(Calendar.MONTH, month - 1);c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));c.set(Calendar.HOUR_OF_DAY, 0);c.set(Calendar.MINUTE, 0);c.set(Calendar.SECOND, 0);c.set(Calendar.MILLISECOND, 0);return c.getTime();}/*** 得到某年某季度第一天** @param year* @param quarter* @return*/public static Date getFirstDayOfQuarter(int year, int quarter) {int month;if (quarter > 4) {return null;} else {month = (quarter - 1) * 3 + 1;}return getFirstDayOfMonth(year, month);}/*** 得到某年某季度最后一天** @param year* @param quarter* @return*/public static Date getLastDayOfQuarter(int year, int quarter) {int month;if (quarter > 4) {return null;} else {month = quarter * 3;}return getLastDayOfMonth(year, month);}/*** 得到某年第一天** @param year* @return*/public static Date getFirstDayOfYear(int year) {return getFirstDayOfQuarter(year, 1);}/*** 得到某年最后一天** @param year* @return*/public static Date getLastDayOfYear(int year) {return getLastDayOfQuarter(year, 4);}/*** 獲取當(dāng)月的 天數(shù)*/public static int getCurrentMonthDay() {Calendar a = Calendar.getInstance();a.set(Calendar.DATE, 1);a.roll(Calendar.DATE, -1);return a.get(Calendar.DATE);}/*** 根據(jù)年 月 獲取對(duì)應(yīng)的月份 天數(shù)*/public static int getDaysByYearMonth(int year, int month) {Calendar a = Calendar.getInstance();a.set(Calendar.YEAR, year);a.set(Calendar.MONTH, month - 1);a.set(Calendar.DATE, 1);a.roll(Calendar.DATE, -1);return a.get(Calendar.DATE);}/*** 根據(jù)日期 找到對(duì)應(yīng)日期的 星期*/public static String getDayOfWeekByDate(String date) {String dayOfweek = "-1";try {SimpleDateFormat myFormatter = new SimpleDateFormat(formatter);Date myDate = myFormatter.parse(date);SimpleDateFormat formatter = new SimpleDateFormat("E");String str = formatter.format(myDate);dayOfweek = str;} catch (Exception e) {logger.info("error: ", e);}return dayOfweek;}public static int getYear(Date date) {Calendar c = Calendar.getInstance();c.setTime(date);return c.get(Calendar.YEAR);}public static int getMonth(Date date) {Calendar c = Calendar.getInstance();c.setTime(date);return c.get(Calendar.MONTH) + 1;}// 獲取yf=‘2014-04’前1個(gè)月的月份,返回2014-03public static String getPreviousMonth(String date) {int nd = Integer.parseInt(date.substring(0, 4));int yf = Integer.parseInt(date.substring(5, 7));if (yf == 1) {nd = nd - 1;yf = 12;} else {yf = yf - 1;}return getDate(getFirstDayOfMonth(nd, yf)).substring(0, 7);}public static Date getDateByString(String formatter ,String date) {SimpleDateFormat myFormatter = new SimpleDateFormat(formatter);Date myDate = null;try {myDate = myFormatter.parse(date);} catch (ParseException e) {e.printStackTrace();}return myDate;} }

總結(jié)

以上是生活随笔為你收集整理的【zip导出】下载导出包含图片,excel,pdf的zip压缩包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

www国产亚洲精品久久网站 | 日日橹狠狠爱欧美视频 | 激情国产av做激情国产爱 | 国产人妻大战黑人第1集 | 久久人人爽人人爽人人片ⅴ | 日本一卡二卡不卡视频查询 | 国产在线一区二区三区四区五区 | 樱花草在线社区www | 精品厕所偷拍各类美女tp嘘嘘 | 国产精品毛片一区二区 | 老太婆性杂交欧美肥老太 | 永久黄网站色视频免费直播 | 国产精品沙发午睡系列 | 东京热男人av天堂 | 国产精品亚洲一区二区三区喷水 | 成人无码影片精品久久久 | 日韩人妻系列无码专区 | 色婷婷综合中文久久一本 | 免费中文字幕日韩欧美 | 亚洲国产精华液网站w | 国内揄拍国内精品人妻 | 久久99精品国产麻豆 | 亚洲国产精品久久久久久 | 欧美成人家庭影院 | 乱中年女人伦av三区 | 亚洲中文字幕乱码av波多ji | 99久久99久久免费精品蜜桃 | 99久久人妻精品免费一区 | 中文字幕av伊人av无码av | 日韩在线不卡免费视频一区 | 国产精品人人爽人人做我的可爱 | 久久精品国产精品国产精品污 | 精品人妻av区 | 国产亚洲精品久久久闺蜜 | 国产精品-区区久久久狼 | 东北女人啪啪对白 | 久久99精品久久久久婷婷 | 日本饥渴人妻欲求不满 | 色婷婷av一区二区三区之红樱桃 | 九九热爱视频精品 | yw尤物av无码国产在线观看 | 一个人免费观看的www视频 | 正在播放老肥熟妇露脸 | 亚洲经典千人经典日产 | 亚洲综合在线一区二区三区 | 亚洲精品久久久久久久久久久 | 精品久久久久久人妻无码中文字幕 | 国产片av国语在线观看 | 亚洲国产欧美国产综合一区 | 国产美女精品一区二区三区 | 国内老熟妇对白xxxxhd | 成人免费视频在线观看 | 国产无套粉嫩白浆在线 | 丰满岳乱妇在线观看中字无码 | 国产一区二区不卡老阿姨 | 小泽玛莉亚一区二区视频在线 | 国产激情精品一区二区三区 | 亚洲国产日韩a在线播放 | 东京一本一道一二三区 | 麻豆国产97在线 | 欧洲 | 蜜桃av抽搐高潮一区二区 | 精品无码国产一区二区三区av | 激情爆乳一区二区三区 | 亚洲国产av美女网站 | 国产精品鲁鲁鲁 | 久久成人a毛片免费观看网站 | 亚洲综合无码久久精品综合 | 76少妇精品导航 | 最近免费中文字幕中文高清百度 | 亚洲欧洲日本无在线码 | 好男人社区资源 | 亚洲精品一区二区三区婷婷月 | 人妻有码中文字幕在线 | 国产成人综合美国十次 | 国产无遮挡又黄又爽免费视频 | 国产明星裸体无码xxxx视频 | 国产特级毛片aaaaaaa高清 | 中文字幕人妻无码一夲道 | 欧美xxxxx精品 | 中文字幕无码免费久久99 | 国产一区二区不卡老阿姨 | 亚洲高清偷拍一区二区三区 | 国产亚洲人成在线播放 | 人人爽人人爽人人片av亚洲 | 亚洲精品综合一区二区三区在线 | 久久午夜无码鲁丝片午夜精品 | 国产真实夫妇视频 | 99久久精品日本一区二区免费 | 欧美日本日韩 | 在线播放亚洲第一字幕 | 亚洲欧美日韩成人高清在线一区 | 成 人影片 免费观看 | 永久免费观看国产裸体美女 | 六十路熟妇乱子伦 | 亚洲天堂2017无码中文 | 中文字幕乱码人妻二区三区 | 国产乡下妇女做爰 | 久久久无码中文字幕久... | 成熟妇人a片免费看网站 | 国产精品高潮呻吟av久久4虎 | 欧美精品一区二区精品久久 | 国产无遮挡又黄又爽又色 | 久久aⅴ免费观看 | 日韩精品无码一区二区中文字幕 | 日韩亚洲欧美精品综合 | 色窝窝无码一区二区三区色欲 | 377p欧洲日本亚洲大胆 | 亚洲 另类 在线 欧美 制服 | 日韩精品无码一区二区中文字幕 | 白嫩日本少妇做爰 | 亚洲欧美日韩国产精品一区二区 | 日韩 欧美 动漫 国产 制服 | 狠狠综合久久久久综合网 | 丰满少妇熟乱xxxxx视频 | 精品 日韩 国产 欧美 视频 | 国产午夜亚洲精品不卡下载 | 波多野结衣高清一区二区三区 | 亚洲aⅴ无码成人网站国产app | 久久五月精品中文字幕 | 成人三级无码视频在线观看 | 色噜噜亚洲男人的天堂 | 日本丰满护士爆乳xxxx | 中文字幕人妻丝袜二区 | 国产情侣作爱视频免费观看 | 强伦人妻一区二区三区视频18 | 亚洲国产精品一区二区美利坚 | 精品一二三区久久aaa片 | 日韩精品乱码av一区二区 | 久久午夜无码鲁丝片午夜精品 | 中文字幕人成乱码熟女app | 天天躁夜夜躁狠狠是什么心态 | 精品无码av一区二区三区 | 中文字幕乱妇无码av在线 | 国产真实乱对白精彩久久 | 国产在线aaa片一区二区99 | 亚洲精品www久久久 | 香港三级日本三级妇三级 | 少妇高潮一区二区三区99 | 日韩av激情在线观看 | 台湾无码一区二区 | 无码任你躁久久久久久久 | 久久精品国产亚洲精品 | 亚洲熟女一区二区三区 | 高清国产亚洲精品自在久久 | 欧美亚洲日韩国产人成在线播放 | 亚洲国产精品毛片av不卡在线 | 久久久久久亚洲精品a片成人 | 国产精品无套呻吟在线 | 水蜜桃亚洲一二三四在线 | 99riav国产精品视频 | 中国女人内谢69xxxxxa片 | 日韩欧美中文字幕在线三区 | 精品一二三区久久aaa片 | 亚洲精品中文字幕久久久久 | 国产热a欧美热a在线视频 | 国产精品-区区久久久狼 | 99麻豆久久久国产精品免费 | 免费人成在线观看网站 | 男女猛烈xx00免费视频试看 | 国产午夜亚洲精品不卡 | 思思久久99热只有频精品66 | 国产午夜无码精品免费看 | 狂野欧美性猛xxxx乱大交 | 99国产欧美久久久精品 | 午夜精品一区二区三区在线观看 | 国产偷自视频区视频 | 日产精品99久久久久久 | 国产乱人伦av在线无码 | 久久久国产一区二区三区 | 欧洲欧美人成视频在线 | 亚洲 日韩 欧美 成人 在线观看 | 国产又粗又硬又大爽黄老大爷视 | 夜夜夜高潮夜夜爽夜夜爰爰 | 青草青草久热国产精品 | 东京热一精品无码av | av小次郎收藏 | 国产尤物精品视频 | 国产香蕉97碰碰久久人人 | 正在播放东北夫妻内射 | 妺妺窝人体色www婷婷 | 高中生自慰www网站 | 成熟人妻av无码专区 | 动漫av网站免费观看 | 欧美人与物videos另类 | 国产热a欧美热a在线视频 | 日韩亚洲欧美中文高清在线 | 粗大的内捧猛烈进出视频 | 成人av无码一区二区三区 | 国产成人综合美国十次 | 日本xxxx色视频在线观看免费 | 无码人妻精品一区二区三区不卡 | 无码毛片视频一区二区本码 | 成人影院yy111111在线观看 | 精品人妻中文字幕有码在线 | 国产国语老龄妇女a片 | 奇米影视7777久久精品 | 亚洲欧美日韩综合久久久 | 丰满人妻翻云覆雨呻吟视频 | 国产欧美熟妇另类久久久 | 一本精品99久久精品77 | av人摸人人人澡人人超碰下载 | 一本无码人妻在中文字幕免费 | 玩弄人妻少妇500系列视频 | 亚洲欧美国产精品久久 | av在线亚洲欧洲日产一区二区 | 麻豆md0077饥渴少妇 | 好屌草这里只有精品 | 久久久久久国产精品无码下载 | 东京热男人av天堂 | 精品厕所偷拍各类美女tp嘘嘘 | 亚洲国产欧美国产综合一区 | 又大又黄又粗又爽的免费视频 | 真人与拘做受免费视频一 | 蜜桃臀无码内射一区二区三区 | 亚洲天堂2017无码中文 | 88国产精品欧美一区二区三区 | 噜噜噜亚洲色成人网站 | 久久人人爽人人爽人人片ⅴ | 97色伦图片97综合影院 | 日本又色又爽又黄的a片18禁 | 欧美国产日产一区二区 | 麻豆精品国产精华精华液好用吗 | 久久精品丝袜高跟鞋 | 欧美自拍另类欧美综合图片区 | 亚洲男人av香蕉爽爽爽爽 | 亚洲日韩一区二区 | 国产疯狂伦交大片 | 人人妻人人藻人人爽欧美一区 | 又大又硬又爽免费视频 | 一个人看的www免费视频在线观看 | 无码精品人妻一区二区三区av | 少妇厨房愉情理9仑片视频 | 自拍偷自拍亚洲精品被多人伦好爽 | 中文字幕无码日韩专区 | 日韩精品无码免费一区二区三区 | 无码午夜成人1000部免费视频 | 丰满妇女强制高潮18xxxx | 牲欲强的熟妇农村老妇女视频 | 国产精品嫩草久久久久 | 又粗又大又硬又长又爽 | 国产一区二区三区精品视频 | 麻豆md0077饥渴少妇 | 成人片黄网站色大片免费观看 | 男女猛烈xx00免费视频试看 | 亚洲成熟女人毛毛耸耸多 | 无码人妻精品一区二区三区下载 | 一个人看的www免费视频在线观看 | 久青草影院在线观看国产 | 日韩人妻无码中文字幕视频 | 成在人线av无码免观看麻豆 | 国产乱码精品一品二品 | 久久久久se色偷偷亚洲精品av | 成人无码视频免费播放 | 亚洲精品国产第一综合99久久 | 国产精品亚洲专区无码不卡 | 国产精品人妻一区二区三区四 | 欧美兽交xxxx×视频 | 亚洲精品国产品国语在线观看 | 国产成人午夜福利在线播放 | 日本丰满熟妇videos | 亚洲精品久久久久久久久久久 | 国内精品九九久久久精品 | 亚洲va欧美va天堂v国产综合 | 日产精品高潮呻吟av久久 | 国产精品久久久久影院嫩草 | 亚洲色偷偷偷综合网 | 中文字幕av伊人av无码av | 日日摸日日碰夜夜爽av | 国产精品18久久久久久麻辣 | 亚拍精品一区二区三区探花 | 黑人巨大精品欧美黑寡妇 | 狠狠色噜噜狠狠狠狠7777米奇 | a在线亚洲男人的天堂 | 亚洲小说图区综合在线 | 久久精品99久久香蕉国产色戒 | 亚洲狠狠色丁香婷婷综合 | 欧美老妇与禽交 | 亚洲日本va午夜在线电影 | 国产精品无码mv在线观看 | 成人一区二区免费视频 | 精品国产青草久久久久福利 | 亚洲乱码中文字幕在线 | 国语精品一区二区三区 | 夜精品a片一区二区三区无码白浆 | 亚洲中文字幕在线无码一区二区 | 一本精品99久久精品77 | 久久精品99久久香蕉国产色戒 | 亚洲色在线无码国产精品不卡 | 色婷婷av一区二区三区之红樱桃 | 久久午夜无码鲁丝片午夜精品 | 又湿又紧又大又爽a视频国产 | 色欲av亚洲一区无码少妇 | 亚洲欧美精品伊人久久 | 国产97在线 | 亚洲 | 一个人看的www免费视频在线观看 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产区女主播在线观看 | 国产午夜亚洲精品不卡下载 | 乱人伦中文视频在线观看 | 4hu四虎永久在线观看 | 成熟妇人a片免费看网站 | 国产午夜亚洲精品不卡 | 露脸叫床粗话东北少妇 | 国产精品高潮呻吟av久久4虎 | 日本熟妇乱子伦xxxx | 国产无av码在线观看 | 精品国产青草久久久久福利 | 久久天天躁夜夜躁狠狠 | 久久精品国产精品国产精品污 | 欧美性生交活xxxxxdddd | 国产亚洲精品久久久久久大师 | а天堂中文在线官网 | 国产精品久久久久无码av色戒 | 国产成人av免费观看 | 美女黄网站人色视频免费国产 | 一本大道伊人av久久综合 | 久久99久久99精品中文字幕 | 欧美刺激性大交 | 色综合久久网 | 无码人妻丰满熟妇区毛片18 | 亚洲无人区午夜福利码高清完整版 | av无码不卡在线观看免费 | 免费观看黄网站 | 久久99久久99精品中文字幕 | 午夜时刻免费入口 | 亚洲七七久久桃花影院 | 在线播放免费人成毛片乱码 | 国产一区二区不卡老阿姨 | 日韩av无码一区二区三区不卡 | 玩弄中年熟妇正在播放 | 丝袜美腿亚洲一区二区 | 午夜福利一区二区三区在线观看 | 激情内射日本一区二区三区 | 亚洲国产高清在线观看视频 | 97人妻精品一区二区三区 | 人人妻人人澡人人爽欧美一区 | 国产无套粉嫩白浆在线 | 水蜜桃亚洲一二三四在线 | 国产卡一卡二卡三 | 久久 国产 尿 小便 嘘嘘 | 5858s亚洲色大成网站www | 国产婷婷色一区二区三区在线 | 欧美人与禽zoz0性伦交 | 国内揄拍国内精品少妇国语 | 18禁止看的免费污网站 | 亚洲精品中文字幕久久久久 | 又色又爽又黄的美女裸体网站 | 97精品人妻一区二区三区香蕉 | 亚洲区小说区激情区图片区 | 欧美日本精品一区二区三区 | 欧美35页视频在线观看 | 久久zyz资源站无码中文动漫 | 欧美日韩在线亚洲综合国产人 | 福利一区二区三区视频在线观看 | 久久99精品久久久久久 | 99久久久国产精品无码免费 | 国产无套内射久久久国产 | 99在线 | 亚洲 | 性欧美熟妇videofreesex | 国产亚洲tv在线观看 | 国产免费久久精品国产传媒 | 国产精品久久久久久久9999 | 老子影院午夜伦不卡 | 色一情一乱一伦一视频免费看 | 久久精品国产一区二区三区肥胖 | 色 综合 欧美 亚洲 国产 | 又湿又紧又大又爽a视频国产 | 久久综合给久久狠狠97色 | 国内揄拍国内精品人妻 | 欧美变态另类xxxx | 自拍偷自拍亚洲精品被多人伦好爽 | 日本欧美一区二区三区乱码 | 天天躁日日躁狠狠躁免费麻豆 | 久久99精品久久久久久动态图 | 国产熟女一区二区三区四区五区 | 女人和拘做爰正片视频 | 日韩精品a片一区二区三区妖精 | 久久综合香蕉国产蜜臀av | 亚洲综合精品香蕉久久网 | 国产在热线精品视频 | 日本一区二区更新不卡 | 成人无码精品一区二区三区 | 131美女爱做视频 | 奇米影视7777久久精品人人爽 | 少妇人妻偷人精品无码视频 | 午夜福利电影 | 亚洲gv猛男gv无码男同 | 一本大道久久东京热无码av | 欧美第一黄网免费网站 | 亚洲精品鲁一鲁一区二区三区 | 中文字幕无码日韩欧毛 | 色综合天天综合狠狠爱 | 精品无码国产一区二区三区av | 午夜精品久久久内射近拍高清 | 国产精品二区一区二区aⅴ污介绍 | 人妻体内射精一区二区三四 | 亚洲精品一区二区三区大桥未久 | 强伦人妻一区二区三区视频18 | 日日噜噜噜噜夜夜爽亚洲精品 | 熟妇人妻无乱码中文字幕 | 国产精品国产自线拍免费软件 | 精品成在人线av无码免费看 | 精品久久8x国产免费观看 | 国产激情无码一区二区app | 天天摸天天透天天添 | 久久99精品国产.久久久久 | 美女扒开屁股让男人桶 | 国内少妇偷人精品视频免费 | 精品无码成人片一区二区98 | 婷婷五月综合激情中文字幕 | 成人aaa片一区国产精品 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 377p欧洲日本亚洲大胆 | 人妻少妇精品久久 | 77777熟女视频在线观看 а天堂中文在线官网 | 97se亚洲精品一区 | 日本一区二区三区免费播放 | 久久精品女人天堂av免费观看 | 精品国产精品久久一区免费式 | 成人片黄网站色大片免费观看 | 久久国产自偷自偷免费一区调 | 天天爽夜夜爽夜夜爽 | 亚洲日韩av一区二区三区中文 | 熟女少妇在线视频播放 | www国产亚洲精品久久久日本 | 给我免费的视频在线观看 | 亚洲 另类 在线 欧美 制服 | 久久久久成人精品免费播放动漫 | 久久综合给久久狠狠97色 | 国产精品久久久久久久9999 | 一本久久a久久精品vr综合 | 未满小14洗澡无码视频网站 | 日产国产精品亚洲系列 | 色婷婷综合中文久久一本 | 一本久道久久综合狠狠爱 | 曰韩无码二三区中文字幕 | 色欲av亚洲一区无码少妇 | 久久久国产一区二区三区 | 久久精品中文字幕大胸 | 国产97人人超碰caoprom | 国产亚洲视频中文字幕97精品 | 精品国产一区二区三区四区在线看 | 国产人妻人伦精品1国产丝袜 | 水蜜桃亚洲一二三四在线 | av无码不卡在线观看免费 | 小sao货水好多真紧h无码视频 | 国产人妻久久精品二区三区老狼 | 国产99久久精品一区二区 | 久久久久99精品国产片 | 国产精品免费大片 | 熟妇人妻激情偷爽文 | 国产无套内射久久久国产 | 国产成人无码午夜视频在线观看 | 日本精品人妻无码77777 天堂一区人妻无码 | 欧美日本免费一区二区三区 | 日本欧美一区二区三区乱码 | 蜜臀aⅴ国产精品久久久国产老师 | 中文字幕 亚洲精品 第1页 | 乱码av麻豆丝袜熟女系列 | 国产国语老龄妇女a片 | 少妇性荡欲午夜性开放视频剧场 | 国产乱人无码伦av在线a | 国产成人午夜福利在线播放 | 亚洲国产午夜精品理论片 | 男人的天堂av网站 | 永久免费精品精品永久-夜色 | 亚洲中文字幕无码中字 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产精品美女久久久网av | 精品人妻人人做人人爽夜夜爽 | 国产香蕉尹人视频在线 | 在线观看国产午夜福利片 | 人人澡人摸人人添 | 国产明星裸体无码xxxx视频 | 红桃av一区二区三区在线无码av | 免费男性肉肉影院 | 成人无码精品1区2区3区免费看 | 国产精品国产自线拍免费软件 | 亚洲区小说区激情区图片区 | www国产亚洲精品久久久日本 | 大乳丰满人妻中文字幕日本 | 亚洲中文字幕在线观看 | 天天做天天爱天天爽综合网 | 亚洲最大成人网站 | 天天燥日日燥 | 夜夜夜高潮夜夜爽夜夜爰爰 | 欧美性黑人极品hd | 男女爱爱好爽视频免费看 | 亚洲欧美综合区丁香五月小说 | 清纯唯美经典一区二区 | 久久久精品456亚洲影院 | 又粗又大又硬又长又爽 | 全黄性性激高免费视频 | 国产亚洲精品久久久久久国模美 | 国产亚洲视频中文字幕97精品 | 久久久久成人精品免费播放动漫 | 东北女人啪啪对白 | 国内少妇偷人精品视频 | 俺去俺来也在线www色官网 | 日本www一道久久久免费榴莲 | 精品一二三区久久aaa片 | 岛国片人妻三上悠亚 | 成熟妇人a片免费看网站 | 亚洲熟妇色xxxxx亚洲 | 亚洲成a人一区二区三区 | 三级4级全黄60分钟 | 在线а√天堂中文官网 | 日韩视频 中文字幕 视频一区 | 精品国产青草久久久久福利 | 97无码免费人妻超级碰碰夜夜 | 亚洲性无码av中文字幕 | 国产两女互慰高潮视频在线观看 | 色一情一乱一伦一区二区三欧美 | 亚洲国产午夜精品理论片 | 亚欧洲精品在线视频免费观看 | 国产精品二区一区二区aⅴ污介绍 | 国内精品久久久久久中文字幕 | 激情综合激情五月俺也去 | 色综合久久久无码网中文 | 妺妺窝人体色www婷婷 | 久久国内精品自在自线 | 内射爽无广熟女亚洲 | 久久精品女人天堂av免费观看 | 老司机亚洲精品影院无码 | 久久精品国产99精品亚洲 | av无码久久久久不卡免费网站 | 高清无码午夜福利视频 | 国精产品一品二品国精品69xx | 久久婷婷五月综合色国产香蕉 | 久久精品国产99精品亚洲 | 色综合久久88色综合天天 | 18禁黄网站男男禁片免费观看 | 老司机亚洲精品影院无码 | 国产精品无码一区二区三区不卡 | 国产又粗又硬又大爽黄老大爷视 | 欧美高清在线精品一区 | 激情亚洲一区国产精品 | 乱中年女人伦av三区 | 婷婷五月综合缴情在线视频 | 99久久精品无码一区二区毛片 | 成人一区二区免费视频 | 欧美肥老太牲交大战 | 人妻少妇精品视频专区 | 野狼第一精品社区 | aa片在线观看视频在线播放 | 亚洲精品午夜无码电影网 | 国产亚洲精品久久久闺蜜 | 亚洲国产欧美在线成人 | 丰满少妇熟乱xxxxx视频 | 国内揄拍国内精品少妇国语 | 55夜色66夜色国产精品视频 | 动漫av网站免费观看 | 午夜福利不卡在线视频 | 精品久久久无码人妻字幂 | 亚洲精品一区二区三区婷婷月 | 99久久精品无码一区二区毛片 | 国产成人综合在线女婷五月99播放 | 无码人妻久久一区二区三区不卡 | 日产精品99久久久久久 | 国产亚洲精品久久久久久 | 久久精品人妻少妇一区二区三区 | 亚洲中文字幕在线无码一区二区 | 国产午夜亚洲精品不卡 | 国产9 9在线 | 中文 | 亚洲日本在线电影 | 亚洲一区二区三区偷拍女厕 | 熟女俱乐部五十路六十路av | 亚洲精品国产第一综合99久久 | 亚洲人成影院在线观看 | 成年美女黄网站色大免费视频 | 亚洲成av人综合在线观看 | 无码精品人妻一区二区三区av | 99久久精品无码一区二区毛片 | 精品人妻人人做人人爽夜夜爽 | 国产精品亚洲а∨无码播放麻豆 | 亚洲日韩中文字幕在线播放 | 国产成人午夜福利在线播放 | 无码国产色欲xxxxx视频 | 老头边吃奶边弄进去呻吟 | 女人被男人躁得好爽免费视频 | 夜精品a片一区二区三区无码白浆 | 国产欧美精品一区二区三区 | 激情人妻另类人妻伦 | 亚洲精品中文字幕 | 7777奇米四色成人眼影 | 成人无码视频在线观看网站 | 国产精品沙发午睡系列 | 国产亚洲精品久久久久久大师 | 97久久精品无码一区二区 | 国产香蕉尹人综合在线观看 | 欧美黑人性暴力猛交喷水 | 国产九九九九九九九a片 | 国产亚洲tv在线观看 | 人人妻人人澡人人爽精品欧美 | 狠狠色噜噜狠狠狠狠7777米奇 | 狂野欧美激情性xxxx | 亚洲一区二区三区含羞草 | 成人无码影片精品久久久 | 国产精品爱久久久久久久 | 精品国产av色一区二区深夜久久 | 国产成人无码av在线影院 | 久久国产精品萌白酱免费 | 中文字幕 亚洲精品 第1页 | 狠狠色噜噜狠狠狠7777奇米 | 日韩av无码一区二区三区 | www国产精品内射老师 | 日日摸日日碰夜夜爽av | 波多野结衣一区二区三区av免费 | 亚洲中文字幕在线观看 | 成熟女人特级毛片www免费 | 久久久久久av无码免费看大片 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 免费无码午夜福利片69 | 欧美freesex黑人又粗又大 | 亚洲一区二区三区播放 | 性生交大片免费看女人按摩摩 | 97色伦图片97综合影院 | 青青青手机频在线观看 | 国语精品一区二区三区 | 图片区 小说区 区 亚洲五月 | 成人欧美一区二区三区 | 欧美国产日产一区二区 | 国产精品二区一区二区aⅴ污介绍 | 双乳奶水饱满少妇呻吟 | 国产精品二区一区二区aⅴ污介绍 | 国产精品久久久久无码av色戒 | 一二三四在线观看免费视频 | 成人一区二区免费视频 | √8天堂资源地址中文在线 | 国产亚洲欧美在线专区 | 性做久久久久久久免费看 | 乱码av麻豆丝袜熟女系列 | 午夜无码区在线观看 | 色欲av亚洲一区无码少妇 | 在线观看国产一区二区三区 | 天堂亚洲2017在线观看 | 久久99精品国产.久久久久 | 亚洲色无码一区二区三区 | 成人三级无码视频在线观看 | 色婷婷欧美在线播放内射 | 国产真实乱对白精彩久久 | 久久久久se色偷偷亚洲精品av | 精品国产一区av天美传媒 | 亚洲精品综合五月久久小说 | 中文字幕无码av激情不卡 | 国产精品内射视频免费 | 亚洲aⅴ无码成人网站国产app | 成年女人永久免费看片 | 中文字幕乱码人妻二区三区 | 国产熟女一区二区三区四区五区 | 97精品国产97久久久久久免费 | 国产成人精品无码播放 | 图片区 小说区 区 亚洲五月 | 久久国产劲爆∧v内射 | 清纯唯美经典一区二区 | 香港三级日本三级妇三级 | 无码人妻精品一区二区三区下载 | 波多野结衣av在线观看 | 蜜桃无码一区二区三区 | 日日夜夜撸啊撸 | 久久精品丝袜高跟鞋 | 国产精品亚洲一区二区三区喷水 | 亚洲日韩av一区二区三区四区 | 国产一区二区三区精品视频 | 欧美乱妇无乱码大黄a片 | 日本高清一区免费中文视频 | 小鲜肉自慰网站xnxx | 久久97精品久久久久久久不卡 | 国产精品18久久久久久麻辣 | 国产高潮视频在线观看 | 2019午夜福利不卡片在线 | 国产精品亚洲综合色区韩国 | 人人爽人人爽人人片av亚洲 | 精品无码国产自产拍在线观看蜜 | 亚洲人成影院在线无码按摩店 | 亚洲男人av香蕉爽爽爽爽 | 国产乱人伦av在线无码 | 色综合久久88色综合天天 | 国产麻豆精品一区二区三区v视界 | 少妇高潮一区二区三区99 | 日本精品人妻无码77777 天堂一区人妻无码 | 中文字幕乱码人妻无码久久 | 免费网站看v片在线18禁无码 | 亚洲s色大片在线观看 | 国产av一区二区精品久久凹凸 | 内射后入在线观看一区 | 亚洲日本va午夜在线电影 | 国产精品久久久久9999小说 | 久久婷婷五月综合色国产香蕉 | 精品偷自拍另类在线观看 | 蜜臀av在线播放 久久综合激激的五月天 | 亚洲国产日韩a在线播放 | 国产成人无码区免费内射一片色欲 | 精品成人av一区二区三区 | 偷窥村妇洗澡毛毛多 | √天堂资源地址中文在线 | 东京无码熟妇人妻av在线网址 | 亚洲国产精品美女久久久久 | 日韩少妇白浆无码系列 | 久久综合九色综合97网 | 人人澡人人透人人爽 | 无码一区二区三区在线 | 色综合久久久无码网中文 | 亚洲国产欧美在线成人 | 无码国内精品人妻少妇 | 日韩精品久久久肉伦网站 | 牲欲强的熟妇农村老妇女视频 | 日韩精品无码一区二区中文字幕 | 国产成人精品久久亚洲高清不卡 | 亚洲精品鲁一鲁一区二区三区 | 国产精品福利视频导航 | 久久国语露脸国产精品电影 | 性色欲网站人妻丰满中文久久不卡 | 无码精品国产va在线观看dvd | 高清不卡一区二区三区 | 在线天堂新版最新版在线8 | 中文字幕无码av波多野吉衣 | 国产成人无码a区在线观看视频app | 欧美日韩久久久精品a片 | 国产精品亚洲五月天高清 | 久久亚洲中文字幕精品一区 | 18无码粉嫩小泬无套在线观看 | 亚洲精品午夜国产va久久成人 | 欧美性生交活xxxxxdddd | 国产成人无码区免费内射一片色欲 | 亚洲日韩av一区二区三区四区 | 思思久久99热只有频精品66 | 亚洲成av人片天堂网无码】 | 午夜精品一区二区三区的区别 | 久久久久久a亚洲欧洲av冫 | 日本饥渴人妻欲求不满 | 夫妻免费无码v看片 | 成在人线av无码免费 | 扒开双腿吃奶呻吟做受视频 | 国产麻豆精品精东影业av网站 | 国产福利视频一区二区 | 麻豆av传媒蜜桃天美传媒 | аⅴ资源天堂资源库在线 | 久久精品视频在线看15 | 国产成人无码av在线影院 | 国产后入清纯学生妹 | 日日碰狠狠丁香久燥 | 亚洲中文字幕在线无码一区二区 | 四虎永久在线精品免费网址 | 免费国产成人高清在线观看网站 | 无码午夜成人1000部免费视频 | 狂野欧美性猛xxxx乱大交 | 大肉大捧一进一出视频出来呀 | 欧洲精品码一区二区三区免费看 | 国产精品亚洲专区无码不卡 | 亚洲经典千人经典日产 | 欧美日本精品一区二区三区 | 成熟妇人a片免费看网站 | 国产成人无码午夜视频在线观看 | 波多野结衣av一区二区全免费观看 | 极品嫩模高潮叫床 | 97夜夜澡人人双人人人喊 | 无套内谢老熟女 | 无码国产乱人伦偷精品视频 | 超碰97人人做人人爱少妇 | 曰韩无码二三区中文字幕 | 狠狠躁日日躁夜夜躁2020 | 人人妻人人澡人人爽欧美一区九九 | 少妇高潮喷潮久久久影院 | 亚洲第一无码av无码专区 | 女人被男人躁得好爽免费视频 | 亚洲精品中文字幕久久久久 | 亚洲欧美色中文字幕在线 | 美女黄网站人色视频免费国产 | 少妇的肉体aa片免费 | 成人亚洲精品久久久久软件 | 青青青爽视频在线观看 | 无码人妻丰满熟妇区五十路百度 | 中文久久乱码一区二区 | 亚洲精品综合五月久久小说 | 精品国精品国产自在久国产87 | 久久亚洲a片com人成 | 久久亚洲中文字幕无码 | 国产精品亚洲а∨无码播放麻豆 | 国产免费久久久久久无码 | 在线欧美精品一区二区三区 | 国产明星裸体无码xxxx视频 | 性色欲情网站iwww九文堂 | 性开放的女人aaa片 | 动漫av一区二区在线观看 | 亚洲天堂2017无码 | 日韩av无码一区二区三区不卡 | 国产在线精品一区二区三区直播 | 国产欧美精品一区二区三区 | 久久久亚洲欧洲日产国码αv | 天天av天天av天天透 | 大地资源中文第3页 | 一本久道久久综合狠狠爱 | 精品一二三区久久aaa片 | 国产内射老熟女aaaa | 国产精品亚洲а∨无码播放麻豆 | 婷婷丁香六月激情综合啪 | 亚洲а∨天堂久久精品2021 | 成人免费视频一区二区 | 亚洲一区av无码专区在线观看 | 国产乱子伦视频在线播放 | 夜夜躁日日躁狠狠久久av | 熟妇人妻中文av无码 | 牲欲强的熟妇农村老妇女 | 午夜精品一区二区三区在线观看 | 成 人影片 免费观看 | 久久久久久久久888 | 亚洲成a人片在线观看无码3d | 亚洲中文字幕乱码av波多ji | 在线天堂新版最新版在线8 | 强辱丰满人妻hd中文字幕 | 久久久成人毛片无码 | 精品 日韩 国产 欧美 视频 | 欧美黑人巨大xxxxx | 2020久久超碰国产精品最新 | 色一情一乱一伦一区二区三欧美 | 99精品无人区乱码1区2区3区 | 久久99热只有频精品8 | 亚洲娇小与黑人巨大交 | 免费观看的无遮挡av | 88国产精品欧美一区二区三区 | 久久aⅴ免费观看 | 丰满妇女强制高潮18xxxx | 欧美老妇交乱视频在线观看 | 狠狠躁日日躁夜夜躁2020 | 国产明星裸体无码xxxx视频 | 国产特级毛片aaaaaa高潮流水 | 老熟女重囗味hdxx69 | 性欧美videos高清精品 | 午夜男女很黄的视频 | 日韩av无码中文无码电影 | 日本xxxx色视频在线观看免费 | 国产在线一区二区三区四区五区 | 亚洲精品成a人在线观看 | 在线天堂新版最新版在线8 | 欧美xxxxx精品 | 精品水蜜桃久久久久久久 | 天堂一区人妻无码 | www国产精品内射老师 | 国内丰满熟女出轨videos | 精品国产福利一区二区 | 99久久人妻精品免费一区 | 亚洲中文字幕在线观看 | 欧美刺激性大交 | 天堂亚洲2017在线观看 | 国产午夜亚洲精品不卡下载 | 亚洲一区二区三区四区 | 国产亚洲精品久久久久久大师 | 亚洲精品一区二区三区在线 | 国产香蕉尹人视频在线 | 亚洲中文字幕av在天堂 | 精品国产一区二区三区av 性色 | 高潮毛片无遮挡高清免费视频 | 欧美日韩视频无码一区二区三 | 无码毛片视频一区二区本码 | 久激情内射婷内射蜜桃人妖 | 国产精品毛片一区二区 | 免费观看黄网站 | 国产卡一卡二卡三 | 国产真实夫妇视频 | av无码不卡在线观看免费 | 免费人成在线观看网站 | 人妻天天爽夜夜爽一区二区 | 人妻aⅴ无码一区二区三区 | 蜜桃视频韩日免费播放 | 无码人妻丰满熟妇区五十路百度 | 国产肉丝袜在线观看 | 中文字幕中文有码在线 | 久久久久免费看成人影片 | 久久综合网欧美色妞网 | 人人爽人人爽人人片av亚洲 | 51国偷自产一区二区三区 | 久久亚洲国产成人精品性色 | 天天拍夜夜添久久精品大 | 欧美亚洲日韩国产人成在线播放 | 亚洲成av人综合在线观看 | 377p欧洲日本亚洲大胆 | 亚洲gv猛男gv无码男同 | 无码人妻久久一区二区三区不卡 | 国产精品人妻一区二区三区四 | 国产sm调教视频在线观看 | 动漫av一区二区在线观看 | 无码一区二区三区在线观看 | 无码一区二区三区在线 | aⅴ亚洲 日韩 色 图网站 播放 | 久久久精品456亚洲影院 | a国产一区二区免费入口 | 又紧又大又爽精品一区二区 | 免费观看激色视频网站 | 97无码免费人妻超级碰碰夜夜 | 亚洲熟悉妇女xxx妇女av | 日本xxxx色视频在线观看免费 | 男女下面进入的视频免费午夜 | 日本xxxx色视频在线观看免费 | 国产精品久免费的黄网站 | 亚洲国产精品无码一区二区三区 | 久久99热只有频精品8 | 国产精品99久久精品爆乳 | 日韩视频 中文字幕 视频一区 | 亚洲国产精品毛片av不卡在线 | 色婷婷综合激情综在线播放 | 日日橹狠狠爱欧美视频 | 女人被男人躁得好爽免费视频 | 亚洲第一网站男人都懂 | 伊人久久大香线蕉亚洲 | 波多野结衣一区二区三区av免费 | 亚洲综合色区中文字幕 | 久久国产36精品色熟妇 | 九一九色国产 | 撕开奶罩揉吮奶头视频 | 亚洲色无码一区二区三区 | 亚洲精品国产精品乱码视色 | 粉嫩少妇内射浓精videos | 亚洲国产成人av在线观看 | 未满成年国产在线观看 | 精品一区二区三区无码免费视频 | 麻豆国产丝袜白领秘书在线观看 | 中文字幕 人妻熟女 | 99久久精品无码一区二区毛片 | 窝窝午夜理论片影院 | 一本色道久久综合亚洲精品不卡 | 99久久人妻精品免费二区 | 少女韩国电视剧在线观看完整 | 国内揄拍国内精品人妻 | 一本久久伊人热热精品中文字幕 | 久久 国产 尿 小便 嘘嘘 | 国产精品久久久 | 日日干夜夜干 | 无码国内精品人妻少妇 | 亚洲人亚洲人成电影网站色 | 久久午夜无码鲁丝片午夜精品 | 1000部啪啪未满十八勿入下载 | 一个人免费观看的www视频 | 男人和女人高潮免费网站 | 亚洲一区二区三区偷拍女厕 | 99久久亚洲精品无码毛片 | 国产亚洲人成在线播放 | 国产肉丝袜在线观看 | 中文字幕人妻无码一区二区三区 | 亚洲区欧美区综合区自拍区 | 永久黄网站色视频免费直播 | 99精品无人区乱码1区2区3区 | 久久精品女人天堂av免费观看 | 天天综合网天天综合色 | 特大黑人娇小亚洲女 | 精品久久久久久亚洲精品 | 在线看片无码永久免费视频 | 中文字幕无码日韩欧毛 | 99精品国产综合久久久久五月天 | 九一九色国产 | 狠狠亚洲超碰狼人久久 | 久久熟妇人妻午夜寂寞影院 | 天天拍夜夜添久久精品 | 无码午夜成人1000部免费视频 | 亚洲成在人网站无码天堂 | 亚洲色大成网站www | 国产高清av在线播放 | 亚洲国精产品一二二线 | 国产偷抇久久精品a片69 | 国产两女互慰高潮视频在线观看 | 成人精品一区二区三区中文字幕 | 国产激情艳情在线看视频 | 黑人巨大精品欧美一区二区 | 中文字幕无码日韩欧毛 | 性色av无码免费一区二区三区 | 人人爽人人澡人人人妻 | 又色又爽又黄的美女裸体网站 | ass日本丰满熟妇pics | 久久99精品国产麻豆蜜芽 | 国产精品人妻一区二区三区四 | 久久精品国产一区二区三区 | 亚洲成av人在线观看网址 | 国内综合精品午夜久久资源 | 亚洲成在人网站无码天堂 | 国产超碰人人爽人人做人人添 | 欧美日韩人成综合在线播放 | 午夜丰满少妇性开放视频 | 午夜无码人妻av大片色欲 | 丁香啪啪综合成人亚洲 | 婷婷色婷婷开心五月四房播播 | 天天躁夜夜躁狠狠是什么心态 | 久久久www成人免费毛片 | 国产精品久久久久9999小说 | 日日干夜夜干 | 亚洲一区二区三区香蕉 | 精品亚洲成av人在线观看 | 免费网站看v片在线18禁无码 | 久久综合久久自在自线精品自 | 乱人伦人妻中文字幕无码久久网 | 俺去俺来也在线www色官网 | 一本久道高清无码视频 | 九九在线中文字幕无码 | 精品国产一区av天美传媒 | 精品国产一区二区三区av 性色 | 少妇邻居内射在线 | a国产一区二区免费入口 | 亚洲欧美国产精品久久 | 人妻无码αv中文字幕久久琪琪布 | 少妇被粗大的猛进出69影院 | 内射后入在线观看一区 | 国产精品亚洲lv粉色 | 东京热男人av天堂 | 国产无遮挡又黄又爽又色 | 国产欧美亚洲精品a | 亚洲成av人综合在线观看 | 国产国语老龄妇女a片 | 国精产品一品二品国精品69xx | 鲁大师影院在线观看 | 天天综合网天天综合色 | 免费观看的无遮挡av | 国产午夜亚洲精品不卡下载 | 中文字幕无线码免费人妻 | 日韩欧美成人免费观看 | 免费无码午夜福利片69 | 中文字幕久久久久人妻 | 桃花色综合影院 | 久久精品无码一区二区三区 | 荫蒂被男人添的好舒服爽免费视频 | 荡女精品导航 | 亚洲综合无码一区二区三区 | 国产精品高潮呻吟av久久4虎 | aa片在线观看视频在线播放 | 国产超碰人人爽人人做人人添 | 两性色午夜视频免费播放 | 久久久国产一区二区三区 | 久热国产vs视频在线观看 | 综合人妻久久一区二区精品 | 国产成人av免费观看 | 装睡被陌生人摸出水好爽 | 狠狠色色综合网站 | 夜夜影院未满十八勿进 | 久久国产精品精品国产色婷婷 | 成 人 免费观看网站 | 日本熟妇乱子伦xxxx | 色综合久久久无码网中文 | 亚洲中文无码av永久不收费 | 中国女人内谢69xxxx | 爆乳一区二区三区无码 | 欧美老妇与禽交 | 天天av天天av天天透 | 天天燥日日燥 | 国产成人一区二区三区别 | 亚洲 a v无 码免 费 成 人 a v | 国产精品久久久午夜夜伦鲁鲁 | 国产av无码专区亚洲a∨毛片 | 亚洲色成人中文字幕网站 | 99久久99久久免费精品蜜桃 | 欧美激情综合亚洲一二区 | 亚洲欧美精品伊人久久 | 丰满少妇女裸体bbw | 丰满少妇高潮惨叫视频 | 97se亚洲精品一区 | 欧美亚洲日韩国产人成在线播放 | 亚洲综合无码久久精品综合 | 水蜜桃av无码 | 大色综合色综合网站 | 老子影院午夜精品无码 | 4hu四虎永久在线观看 | 国产亲子乱弄免费视频 | 日日麻批免费40分钟无码 | 日日摸夜夜摸狠狠摸婷婷 | 97夜夜澡人人爽人人喊中国片 | 欧美丰满熟妇xxxx性ppx人交 | 国产亚av手机在线观看 | 亚洲乱码中文字幕在线 | 精品日本一区二区三区在线观看 | 国产舌乚八伦偷品w中 | 中文精品无码中文字幕无码专区 | 精品无码国产自产拍在线观看蜜 | 最新国产麻豆aⅴ精品无码 | 欧美丰满熟妇xxxx性ppx人交 | 秋霞成人午夜鲁丝一区二区三区 | 国产成人综合美国十次 | 性做久久久久久久免费看 | 亚洲の无码国产の无码步美 | 狂野欧美性猛交免费视频 | 日韩无码专区 | 久久伊人色av天堂九九小黄鸭 | 日韩人妻系列无码专区 | 国产成人精品三级麻豆 | 国产精华av午夜在线观看 | 久久无码人妻影院 | 欧美性猛交内射兽交老熟妇 | 国产97在线 | 亚洲 | 中文字幕无码av激情不卡 | 免费国产成人高清在线观看网站 | 人人妻人人澡人人爽人人精品 | 性欧美熟妇videofreesex | 国产美女极度色诱视频www | 国产高潮视频在线观看 | 激情内射亚州一区二区三区爱妻 | 国产成人一区二区三区别 | 久久精品人妻少妇一区二区三区 | 欧美国产亚洲日韩在线二区 | 亚洲 高清 成人 动漫 | 国内精品人妻无码久久久影院蜜桃 | 荫蒂被男人添的好舒服爽免费视频 | 色婷婷久久一区二区三区麻豆 | 午夜精品一区二区三区在线观看 | 国产成人无码午夜视频在线观看 | 大色综合色综合网站 | 狂野欧美激情性xxxx | 日韩亚洲欧美精品综合 | 国产成人精品优优av | 老头边吃奶边弄进去呻吟 | 欧美人与物videos另类 | 亚洲精品中文字幕久久久久 | 少妇久久久久久人妻无码 | 国产精品高潮呻吟av久久4虎 | 无码人妻黑人中文字幕 | 爆乳一区二区三区无码 | 日本精品久久久久中文字幕 | 国产av一区二区精品久久凹凸 | 一个人看的视频www在线 | 国产激情精品一区二区三区 | 欧美 丝袜 自拍 制服 另类 | 亚洲精品午夜无码电影网 | 成人精品一区二区三区中文字幕 | 亚洲精品一区二区三区大桥未久 | 丁香啪啪综合成人亚洲 | 欧美人与禽猛交狂配 | 在线天堂新版最新版在线8 | 色狠狠av一区二区三区 | 欧美zoozzooz性欧美 | 国产精品久久久一区二区三区 | 日韩欧美群交p片內射中文 | 欧美性猛交内射兽交老熟妇 | 亚洲国精产品一二二线 | 国产性生交xxxxx无码 | 国产av一区二区三区最新精品 | 中文字幕中文有码在线 | 东京热无码av男人的天堂 | 俺去俺来也在线www色官网 | 亚洲成a人片在线观看无码3d | 久久久久久九九精品久 | 久久97精品久久久久久久不卡 | 日韩人妻无码中文字幕视频 | 黑人巨大精品欧美黑寡妇 | 狠狠色色综合网站 | ass日本丰满熟妇pics | 午夜精品久久久久久久 | 亚洲精品一区二区三区在线观看 | 精品亚洲韩国一区二区三区 | 国产精品第一国产精品 | 国产在线精品一区二区高清不卡 | 精品aⅴ一区二区三区 | 妺妺窝人体色www婷婷 | 欧美激情综合亚洲一二区 | 亚洲自偷自偷在线制服 | 午夜精品久久久内射近拍高清 | 国产区女主播在线观看 | 亚洲色在线无码国产精品不卡 | 国产免费观看黄av片 | 一本一道久久综合久久 | 国产偷国产偷精品高清尤物 | a片免费视频在线观看 | 国产成人综合在线女婷五月99播放 | 久久精品国产大片免费观看 | 日本又色又爽又黄的a片18禁 | 精品无码成人片一区二区98 | 波多野结衣高清一区二区三区 | 久久天天躁夜夜躁狠狠 | 日韩人妻少妇一区二区三区 | 欧美性猛交内射兽交老熟妇 | 日韩人妻无码中文字幕视频 | 亚洲经典千人经典日产 | 东京热无码av男人的天堂 | 亚洲小说春色综合另类 | 最近的中文字幕在线看视频 | 国产人妻大战黑人第1集 | 一个人看的www免费视频在线观看 | 7777奇米四色成人眼影 | 亚洲精品一区二区三区在线 | 国产激情综合五月久久 | 欧美日韩精品 | 中文字幕无码视频专区 | 亚洲国产精品久久久天堂 | 99久久99久久免费精品蜜桃 | 亚洲国产综合无码一区 | 一本一道久久综合久久 | 免费观看又污又黄的网站 | 欧美精品免费观看二区 | 51国偷自产一区二区三区 | 久久无码中文字幕免费影院蜜桃 | 在线亚洲高清揄拍自拍一品区 | 久久精品丝袜高跟鞋 | 精品人妻中文字幕有码在线 | 日日躁夜夜躁狠狠躁 | 婷婷五月综合缴情在线视频 | 国产激情综合五月久久 | 无码人妻精品一区二区三区不卡 | 最新版天堂资源中文官网 | 小sao货水好多真紧h无码视频 | 人妻插b视频一区二区三区 | 久久午夜夜伦鲁鲁片无码免费 | 国产偷国产偷精品高清尤物 | 亚洲另类伦春色综合小说 | 初尝人妻少妇中文字幕 | 国产在线aaa片一区二区99 | 成在人线av无码免费 | 国产两女互慰高潮视频在线观看 | 日韩av无码一区二区三区不卡 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产精品无码mv在线观看 | 色综合久久久无码网中文 | 成年美女黄网站色大免费视频 | 欧洲欧美人成视频在线 | 日本熟妇人妻xxxxx人hd | 欧美日韩色另类综合 | 三上悠亚人妻中文字幕在线 | 欧美老妇交乱视频在线观看 | 少妇久久久久久人妻无码 | 国产国产精品人在线视 | 日本大香伊一区二区三区 | 性生交大片免费看女人按摩摩 | 300部国产真实乱 | 四虎永久在线精品免费网址 | 国产成人人人97超碰超爽8 | 久久久www成人免费毛片 | 亚洲精品无码人妻无码 | 久久天天躁狠狠躁夜夜免费观看 | 丁香花在线影院观看在线播放 | 人妻夜夜爽天天爽三区 | 国产精品无码一区二区桃花视频 | 日韩精品成人一区二区三区 | 国产精品无码一区二区桃花视频 | 伦伦影院午夜理论片 | 亚洲色在线无码国产精品不卡 | 日本一卡二卡不卡视频查询 | 中文字幕乱码人妻二区三区 | 亚洲熟妇色xxxxx欧美老妇 | 午夜福利一区二区三区在线观看 | 99久久精品无码一区二区毛片 | 欧美 丝袜 自拍 制服 另类 | 日日碰狠狠躁久久躁蜜桃 | 女人色极品影院 | 亚洲日韩乱码中文无码蜜桃臀网站 | 色婷婷av一区二区三区之红樱桃 | 日本大乳高潮视频在线观看 | 好爽又高潮了毛片免费下载 | 国产特级毛片aaaaaa高潮流水 | 国产亚洲精品久久久久久大师 | 亚洲国产av精品一区二区蜜芽 | 少妇一晚三次一区二区三区 | 伊人久久婷婷五月综合97色 | 2020久久超碰国产精品最新 | 亚洲狠狠婷婷综合久久 | 青春草在线视频免费观看 | 久久天天躁狠狠躁夜夜免费观看 | 熟妇人妻激情偷爽文 | 国产口爆吞精在线视频 | 久久99精品久久久久久 | 日本熟妇大屁股人妻 | 97精品人妻一区二区三区香蕉 | 中文字幕无码日韩专区 | 亚洲精品国偷拍自产在线麻豆 | 又粗又大又硬毛片免费看 | 久久无码中文字幕免费影院蜜桃 | 中文精品久久久久人妻不卡 | 小泽玛莉亚一区二区视频在线 | 亚洲日韩一区二区三区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 日韩欧美成人免费观看 | 精品水蜜桃久久久久久久 | 日本一卡二卡不卡视频查询 | 欧美成人高清在线播放 | 97精品人妻一区二区三区香蕉 | 亚洲成av人片在线观看无码不卡 | 亚洲 a v无 码免 费 成 人 a v | 久久天天躁狠狠躁夜夜免费观看 | 亚洲色在线无码国产精品不卡 | 中国大陆精品视频xxxx | 国产肉丝袜在线观看 | 欧美黑人性暴力猛交喷水 | 亚洲精品欧美二区三区中文字幕 | 欧美成人高清在线播放 | 色狠狠av一区二区三区 | 两性色午夜视频免费播放 | 国产亚洲精品精品国产亚洲综合 | 牲欲强的熟妇农村老妇女视频 | 精品国产一区二区三区四区在线看 | 日韩在线不卡免费视频一区 | 久久精品中文字幕大胸 | 色综合久久久无码网中文 | 免费视频欧美无人区码 | 国产精品久久久久久久9999 | 精品久久久无码人妻字幂 | 99久久精品午夜一区二区 | 特黄特色大片免费播放器图片 | 亚洲综合无码一区二区三区 | 中文字幕乱码中文乱码51精品 | 久久精品中文字幕一区 | 激情国产av做激情国产爱 | 色婷婷综合中文久久一本 | 99精品国产综合久久久久五月天 | 老熟女乱子伦 | 东京无码熟妇人妻av在线网址 | 色一情一乱一伦一区二区三欧美 | 人人澡人人妻人人爽人人蜜桃 | 又紧又大又爽精品一区二区 | 亚洲国产高清在线观看视频 | 狠狠色欧美亚洲狠狠色www | 成人免费视频在线观看 | 精品国产一区二区三区四区在线看 | 人妻少妇精品无码专区二区 | 成人免费视频在线观看 | 国产网红无码精品视频 | 麻豆精品国产精华精华液好用吗 | 内射欧美老妇wbb | 熟女少妇人妻中文字幕 | 国产午夜亚洲精品不卡下载 | 日韩欧美中文字幕公布 | 成人片黄网站色大片免费观看 | 中文字幕无码av激情不卡 | 国产精品无码mv在线观看 | 东京热一精品无码av | 成人一在线视频日韩国产 | 亚洲无人区一区二区三区 | 亚洲精品久久久久久一区二区 | 精品久久久中文字幕人妻 | 男人的天堂2018无码 | 亚洲va中文字幕无码久久不卡 | 中文字幕 人妻熟女 | 日本免费一区二区三区最新 | 无码吃奶揉捏奶头高潮视频 | 性生交片免费无码看人 | 久久亚洲中文字幕精品一区 | 国产性生大片免费观看性 | 红桃av一区二区三区在线无码av | 18禁黄网站男男禁片免费观看 | 九月婷婷人人澡人人添人人爽 | 爽爽影院免费观看 | 无码乱肉视频免费大全合集 | 欧美日韩久久久精品a片 | 午夜时刻免费入口 | 国产性生大片免费观看性 | 激情内射亚州一区二区三区爱妻 | 波多野结衣aⅴ在线 | av无码电影一区二区三区 | 国产莉萝无码av在线播放 | 在教室伦流澡到高潮hnp视频 | 久久久精品456亚洲影院 | 欧美性生交xxxxx久久久 | а√天堂www在线天堂小说 | 亚洲色在线无码国产精品不卡 | 图片区 小说区 区 亚洲五月 | 99久久精品国产一区二区蜜芽 | 牲欲强的熟妇农村老妇女 | 俄罗斯老熟妇色xxxx | 久久精品国产日本波多野结衣 | 欧美激情一区二区三区成人 | a国产一区二区免费入口 | 99精品国产综合久久久久五月天 | 97无码免费人妻超级碰碰夜夜 | 亚洲欧美色中文字幕在线 | 色爱情人网站 | 国产黄在线观看免费观看不卡 | 国产av一区二区三区最新精品 | 中国女人内谢69xxxxxa片 | 日产精品高潮呻吟av久久 | 女人被男人爽到呻吟的视频 | 亚洲の无码国产の无码步美 | 国产精品人妻一区二区三区四 | 亚洲熟妇色xxxxx欧美老妇 | 亚洲成熟女人毛毛耸耸多 | 窝窝午夜理论片影院 | 免费看少妇作爱视频 | 日本www一道久久久免费榴莲 | 无码福利日韩神码福利片 | 精品无码成人片一区二区98 | 亚洲阿v天堂在线 | 无码纯肉视频在线观看 | 成熟妇人a片免费看网站 | 极品嫩模高潮叫床 | 99久久亚洲精品无码毛片 | 未满小14洗澡无码视频网站 | 亚洲精品久久久久久久久久久 | 强奷人妻日本中文字幕 | 国产凸凹视频一区二区 | 亚洲日本在线电影 | 99精品无人区乱码1区2区3区 | 精品国产乱码久久久久乱码 | 日本丰满护士爆乳xxxx | 国产成人无码专区 | 人妻少妇精品无码专区二区 | 国产精品亚洲五月天高清 | 精品国产一区二区三区四区在线看 | 国产av剧情md精品麻豆 | 日日碰狠狠躁久久躁蜜桃 | 亚洲日韩中文字幕在线播放 | 日日橹狠狠爱欧美视频 | 亚洲s码欧洲m码国产av | a片在线免费观看 | 国产亚洲欧美日韩亚洲中文色 | 特级做a爰片毛片免费69 | 动漫av网站免费观看 | 野狼第一精品社区 | 日韩亚洲欧美精品综合 | 免费人成网站视频在线观看 | 99久久99久久免费精品蜜桃 | 国产色xx群视频射精 | 少女韩国电视剧在线观看完整 | 国产香蕉尹人综合在线观看 | 国产精品亚洲五月天高清 | 日韩无套无码精品 | ass日本丰满熟妇pics | 国产成人精品一区二区在线小狼 | 色五月丁香五月综合五月 | 东京一本一道一二三区 | 99在线 | 亚洲 | 精品国产麻豆免费人成网站 | 亚洲中文字幕无码中文字在线 | 午夜理论片yy44880影院 | 久久综合给合久久狠狠狠97色 | 色婷婷综合中文久久一本 | 国产精品久久国产精品99 | 亚洲日本在线电影 | 国产精品办公室沙发 | 亚洲gv猛男gv无码男同 | 性欧美牲交在线视频 | 东北女人啪啪对白 | 在线观看免费人成视频 | 中文亚洲成a人片在线观看 | 久久精品中文闷骚内射 | 双乳奶水饱满少妇呻吟 | 高潮毛片无遮挡高清免费视频 | 亚洲成a人片在线观看无码3d | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲色www成人永久网址 | 国产激情艳情在线看视频 | 国产97人人超碰caoprom | 精品欧美一区二区三区久久久 | 日韩人妻无码一区二区三区久久99 | 国产欧美熟妇另类久久久 | 久久人妻内射无码一区三区 | 免费看少妇作爱视频 | 伊人久久大香线蕉av一区二区 | 欧美肥老太牲交大战 | 波多野42部无码喷潮在线 | 人妻插b视频一区二区三区 | 蜜臀aⅴ国产精品久久久国产老师 | 国产69精品久久久久app下载 | 久久国产劲爆∧v内射 | 亚洲一区二区三区 | 亚洲日韩中文字幕在线播放 | 欧美日韩视频无码一区二区三 | 日欧一片内射va在线影院 | 久久精品中文闷骚内射 | 久久精品人人做人人综合试看 | 亚洲人成人无码网www国产 | 欧美人妻一区二区三区 | 午夜福利试看120秒体验区 | 国产精品成人av在线观看 | 亚洲精品午夜无码电影网 | 高清无码午夜福利视频 | 亚洲狠狠色丁香婷婷综合 | 亚洲人亚洲人成电影网站色 | 97人妻精品一区二区三区 | 无套内谢的新婚少妇国语播放 | 中文亚洲成a人片在线观看 | 国产午夜福利亚洲第一 | 自拍偷自拍亚洲精品10p | 国产成人无码av片在线观看不卡 | 久久久久久九九精品久 | 亚洲人成人无码网www国产 | 国产肉丝袜在线观看 | 中文字幕无码视频专区 | 国产人妖乱国产精品人妖 | 国产午夜无码精品免费看 | 粉嫩少妇内射浓精videos | 日本高清一区免费中文视频 | 爱做久久久久久 | 亚洲无人区一区二区三区 | 永久免费精品精品永久-夜色 | 亚洲欧美日韩成人高清在线一区 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲经典千人经典日产 | 国产精品国产自线拍免费软件 | 国产精品美女久久久 | 天天摸天天碰天天添 | 色婷婷av一区二区三区之红樱桃 | 蜜桃视频插满18在线观看 | 内射欧美老妇wbb | 欧美激情综合亚洲一二区 | 亚洲欧美国产精品久久 | 欧美乱妇无乱码大黄a片 | 色欲人妻aaaaaaa无码 | 国产av人人夜夜澡人人爽麻豆 | 亚洲国产精品无码一区二区三区 | 久久久成人毛片无码 | 午夜理论片yy44880影院 | 国产亚洲人成在线播放 | 日本肉体xxxx裸交 | 玩弄少妇高潮ⅹxxxyw | 99riav国产精品视频 | 麻豆国产人妻欲求不满 | 日本丰满护士爆乳xxxx | 98国产精品综合一区二区三区 | 熟妇人妻无码xxx视频 | 国产成人精品三级麻豆 | а天堂中文在线官网 | 午夜熟女插插xx免费视频 | 国产精品久久国产三级国 | 老熟妇仑乱视频一区二区 | 国产明星裸体无码xxxx视频 | 无套内谢的新婚少妇国语播放 | 日产精品99久久久久久 | 色欲久久久天天天综合网精品 | 55夜色66夜色国产精品视频 | 中文字幕无码视频专区 | 无遮无挡爽爽免费视频 | 久久久久亚洲精品男人的天堂 | 草草网站影院白丝内射 | 一本久道高清无码视频 | 色综合久久中文娱乐网 | 欧美变态另类xxxx | 久久久久久a亚洲欧洲av冫 | 天堂а√在线地址中文在线 | 欧美老熟妇乱xxxxx | 久久午夜无码鲁丝片秋霞 | 粗大的内捧猛烈进出视频 | 人妻少妇精品久久 | 老太婆性杂交欧美肥老太 | 日本精品少妇一区二区三区 | 中文字幕人妻无码一区二区三区 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产精品.xx视频.xxtv | 熟女俱乐部五十路六十路av | 欧美黑人乱大交 | 18精品久久久无码午夜福利 | 日日摸天天摸爽爽狠狠97 | 欧美人妻一区二区三区 | 日本精品久久久久中文字幕 | 国内精品一区二区三区不卡 | 亚洲精品国产a久久久久久 | √天堂中文官网8在线 | 人妻体内射精一区二区三四 | 日日天日日夜日日摸 | 在线观看欧美一区二区三区 | 88国产精品欧美一区二区三区 | 啦啦啦www在线观看免费视频 | 无码国产色欲xxxxx视频 | 中文无码伦av中文字幕 | 国产疯狂伦交大片 | 国产特级毛片aaaaaa高潮流水 | 国产精品鲁鲁鲁 | 性欧美videos高清精品 | 人人爽人人澡人人人妻 | 国产熟妇另类久久久久 | 国产精品亚洲五月天高清 | 欧美高清在线精品一区 | 亚洲精品一区二区三区在线 | 东京热无码av男人的天堂 | 日日鲁鲁鲁夜夜爽爽狠狠 | 中文字幕av伊人av无码av | 久久久久人妻一区精品色欧美 | 白嫩日本少妇做爰 | 日本一卡2卡3卡四卡精品网站 | 日产精品高潮呻吟av久久 | 欧美精品国产综合久久 | 男女作爱免费网站 | 少妇一晚三次一区二区三区 | av无码不卡在线观看免费 | 国产乱人偷精品人妻a片 | 国产综合色产在线精品 | 欧美丰满熟妇xxxx | 性生交大片免费看女人按摩摩 | 内射欧美老妇wbb | 精品国产麻豆免费人成网站 | 久久久中文久久久无码 | 97夜夜澡人人爽人人喊中国片 | 亚洲区小说区激情区图片区 | 亚洲日韩中文字幕在线播放 | 在线a亚洲视频播放在线观看 | 国产精品亚洲五月天高清 | 强辱丰满人妻hd中文字幕 | 粉嫩少妇内射浓精videos | 人妻少妇精品视频专区 | 日本免费一区二区三区最新 | 欧洲美熟女乱又伦 | 波多野42部无码喷潮在线 | 亚洲娇小与黑人巨大交 | 亚洲色www成人永久网址 | 日韩精品久久久肉伦网站 | 在线亚洲高清揄拍自拍一品区 | 东京无码熟妇人妻av在线网址 | 日韩无码专区 | 免费观看又污又黄的网站 | 精品成在人线av无码免费看 | 任你躁在线精品免费 | 亚洲日韩av片在线观看 | 国产一精品一av一免费 | 人妻少妇精品视频专区 | 精品无码av一区二区三区 | 亚洲国产精品无码久久久久高潮 | 无码国产激情在线观看 | 最新国产乱人伦偷精品免费网站 | 正在播放东北夫妻内射 | 2019nv天堂香蕉在线观看 | 久久久精品欧美一区二区免费 | 亚洲 激情 小说 另类 欧美 | 未满小14洗澡无码视频网站 | 又粗又大又硬毛片免费看 | 国产成人综合色在线观看网站 | 亚洲精品成a人在线观看 | 无遮无挡爽爽免费视频 | 国内少妇偷人精品视频免费 | 午夜成人1000部免费视频 | 国产精品久久久久久亚洲毛片 | 亚洲综合伊人久久大杳蕉 | 亚洲中文字幕va福利 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲国产午夜精品理论片 | 成人性做爰aaa片免费看不忠 | 亚洲中文字幕无码中字 | 国产午夜福利100集发布 | 国产真实乱对白精彩久久 | ass日本丰满熟妇pics | 97夜夜澡人人双人人人喊 | 永久免费观看美女裸体的网站 | 日本丰满护士爆乳xxxx | 精品国偷自产在线视频 | 好爽又高潮了毛片免费下载 | 中文字幕无码av波多野吉衣 | 日本在线高清不卡免费播放 | 人人爽人人澡人人人妻 | 97资源共享在线视频 | 中文字幕无码热在线视频 | 成人aaa片一区国产精品 | 精品国精品国产自在久国产87 | 4hu四虎永久在线观看 | 天天拍夜夜添久久精品 | 国产亚洲人成在线播放 | 婷婷六月久久综合丁香 | 任你躁国产自任一区二区三区 | 最新版天堂资源中文官网 | 天下第一社区视频www日本 | 精品久久8x国产免费观看 | 窝窝午夜理论片影院 | 国产成人综合美国十次 | 久久精品国产99久久6动漫 | 东京热一精品无码av | 国产猛烈高潮尖叫视频免费 | 中文字幕无码人妻少妇免费 | 免费观看激色视频网站 | 成人一区二区免费视频 | 国产无av码在线观看 | 又粗又大又硬又长又爽 | 国产精品亚洲lv粉色 | 无码成人精品区在线观看 | 中文字幕乱码中文乱码51精品 | 欧美国产日韩久久mv | 老司机亚洲精品影院 | 99视频精品全部免费免费观看 | 初尝人妻少妇中文字幕 | a国产一区二区免费入口 | 国产两女互慰高潮视频在线观看 | 精品国产成人一区二区三区 | 中文无码精品a∨在线观看不卡 | 久久精品人人做人人综合试看 | 天下第一社区视频www日本 | 亚洲成色www久久网站 | 日本精品人妻无码77777 天堂一区人妻无码 | 福利一区二区三区视频在线观看 | 久久 国产 尿 小便 嘘嘘 | 久久亚洲国产成人精品性色 | 一本久久a久久精品亚洲 | 精品国产一区二区三区四区在线看 | 精品久久久久久亚洲精品 | 人人妻人人澡人人爽欧美一区 | 久久综合给合久久狠狠狠97色 | 国产精品毛多多水多 | 国产亚洲精品久久久久久国模美 | 伊人久久大香线蕉亚洲 | 无遮挡国产高潮视频免费观看 | 无码av最新清无码专区吞精 |