亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? uploaddownfile.java

?? 一個網上購書系統
?? JAVA
字號:
/**
 * 
 */
package com.bookstore.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.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.StringTokenizer;

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

/**
 * 調用方法:
 *Upload up = new Upload();
 *up.init(request);


 *此處可以調用setSaveDir(String saveDir);設置保存路徑
 *調用setMaxFileSize(long size)設置上傳文件的最大字??.
 *調用setTagFileName(String)設置上傳后文件的名字(只對第一個文件有??)

 *up. uploadFile();

 *然后String[] names = up.getFileName();得到上傳的文件名,文件絕對路徑應該??
 *保存的目錄saveDir+"/"+names[i];
 *可以通過up.getParameter("field");得到上傳的文本或up.getParameterValues("filed")
 *得到同名字段如多個checkBox的???.
 *其它的自己試??.

 * 
 */
public class UploadDownFile {

	private String saveDir = "."; // 要保存文件的路徑

	private String charset = ""; // 字符??

	private ArrayList tmpFileName = new ArrayList(); // 臨時存放文件名的數據結構

	private Hashtable parameter = new Hashtable(); // 存放參數名和值的數據結構

	private HttpServletRequest request; // 用于傳入請求對象的實??

	private String boundary = ""; // 內存數據的分隔符

	private int len = 0; // 每次從內在中實際讀到的字節長??

	private String queryString;

	private int count; // 上載的文件???數

	private String[] fileName; // 上載的文件名數組

	private long maxFileSize = 1024 * 1024 * 10; // ??大文件上載字??,默認10M;

	private String tagFileName = "";

	public final void init(HttpServletRequest request) throws ServletException {
		this.request = request;
		boundary = request.getContentType().substring(30); // 得到內存中數據分界符
		queryString = request.getQueryString();
	}

	public String getParameter(String s) { // 用于得到指定字段的參數???,重寫request.getParameter(String
											// s)
		if (parameter.isEmpty()) {
			return null;
		}
		return (String) parameter.get(s);
	}

	public String[] getParameterValues(String s) { // 用于得到指定同名字段的參數數??,重寫request.getParameterValues(String
													// s)
		ArrayList al = new ArrayList();
		if (parameter.isEmpty()) {
			return null;
		}
		Enumeration e = parameter.keys();
		while (e.hasMoreElements()) {
			String key = (String) e.nextElement();
			if (-1 != key.indexOf(s + "||||||||||") || key.equals(s)) {
				al.add(parameter.get(key));
			}
		}
		if (al.size() == 0) {
			return null;
		}
		String[] value = new String[al.size()];
		for (int i = 0; i < value.length; i++) {
			value[i] = (String) al.get(i);
		}
		return value;
	}

	public String getQueryString() {
		return queryString;
	}

	public int getCount() {
		return count;
	}

	public String[] getFileName() {
		return fileName;
	}

	public void setMaxFileSize(long size) {
		maxFileSize = size;
	}

	public void setTagFileName(String filename) {
		tagFileName = filename;
	}

	public void setSaveDir(String saveDir) { // 設置上載文件要保存的路徑
		this.saveDir = saveDir;
		File testdir = new File(saveDir); // 為了保證目錄存在,如果沒有則新建該目錄
		if (!testdir.exists()) {
			testdir.mkdirs();
		}
	}

	public void setCharset(String charset) { // 設置字符??
		this.charset = charset;
	}

	public boolean uploadFile() throws ServletException, IOException { // 用戶調用的上載方??
		setCharset(request.getCharacterEncoding());
		return uploadFile(request.getInputStream());
	}

	public boolean uploadFile(ServletInputStream servletinputstream) throws // 取得央存數據的主方法
			ServletException, IOException {
		String line = null;
		byte[] buffer = new byte[256];
		while ((line = readLine(buffer, servletinputstream, charset)) != null) {
			if (line.startsWith("Content-Disposition: form-data;")) {
				int i = line.indexOf("filename=");
				if (i >= 0) { // 如果??段分界符內的描述中有filename=,說明是文件的編碼內容
					String fName = getFileName(line);
					if (fName.equals("")) {
						continue;
					}
					if (count == 0 && tagFileName.length() != 0) {
						String ext = fName
								.substring((fName.lastIndexOf(".") + 1));
						fName = tagFileName + "." + ext;
					}
					tmpFileName.add(fName);
					count++;
					while ((line = readLine(buffer, servletinputstream, charset)) != null) {
						if (line.length() <= 2) {
							break;
						}
					}
					File f = new File(saveDir, fName);
					FileOutputStream dos = new FileOutputStream(f);
					long size = 0l;
					while ((line = readLine(buffer, servletinputstream, null)) != null) {
						if (line.indexOf(boundary) != -1) {
							break;
						}
						size += len;
						if (size > maxFileSize) {
							throw new IOException("文件超過" + maxFileSize + "字節!");
						}
						dos.write(buffer, 0, len);
					}
					dos.close();
				} else { // 否則是字段編碼的內容
					String key = getKey(line);
					String value = "";
					while ((line = readLine(buffer, servletinputstream, charset)) != null) {
						if (line.length() <= 2) {
							break;
						}
					}
					while ((line = readLine(buffer, servletinputstream, charset)) != null) {

						if (line.indexOf(boundary) != -1) {
							break;
						}
						value += line;
					}
					put(key, value.trim(), parameter);
				}
			}
		}
		if (queryString != null) {
			String[] each = split(queryString, "&");
			for (int k = 0; k < each.length; k++) {
				String[] nv = split(each[k], "=");
				if (nv.length == 2) {
					put(nv[0], nv[1], parameter);
				}
			}
		}
		fileName = new String[tmpFileName.size()];
		for (int k = 0; k < fileName.length; k++) {
			fileName[k] = (String) tmpFileName.get(k); // 把ArrayList中臨時文件名倒入數據中供用戶調用
		}
		if (fileName.length == 0) {
			return false; // 如果fileName數據為空說明沒有上載任何文件
		}
		return true;
	}

	private void put(String key, String value, Hashtable ht) {
		if (!ht.containsKey(key)) {
			ht.put(key, value);
		} else { // 如果已經有了同名的KEY,就要把當前的key更名,同時要注意不能構成和KEY同名
			try {
				Thread.sleep(1); // 為了不在同一ms中產生兩個相同的key
			} catch (Exception e) {
			}
			key += "||||||||||" + System.currentTimeMillis();
			ht.put(key, value);
		}
	}

	/*
	 * 調用ServletInputstream.readLine(byte[] b,int
	 * offset,length)方法,該方法是從ServletInputstream流中讀一??
	 * 到指定的byte數組,為了保證能夠容納????,該byte[]b不應該小??256,重寫的readLine??,調用了一個成員變量len??
	 * 實際讀到的字節數(有的行不??256),則在文件內容寫入時應該從byte數組中寫入這個len長度的字節???不是整個byte[]
	 * 的長??,但重寫的這個方法返回的是String以便分析實際內容,不能返回len,??以把len設為成員變量,在每次讀操作?? 把實際長度賦給它.
	 * 也就是說在處理到文件的內容時數據既要以String形式返回以便分析??始和結束標記,又要同時以byte[]的形式寫到文?? 輸出流中.
	 */
	public String readLine(byte[] Linebyte,
			ServletInputStream servletinputstream, String charset) {
		try {
			len = servletinputstream.readLine(Linebyte, 0, Linebyte.length);
			if (len == -1) {
				return null;
			}
			if (charset == null) {
				return new String(Linebyte, 0, len);
			} else {
				return new String(Linebyte, 0, len, charset);
			}

		} catch (Exception _ex) {
			return null;
		}

	}

	private String getFileName(String line) { // 從描述字符串中分離出文件??
		if (line == null) {
			return "";
		}
		int i = line.indexOf("filename=");
		line = line.substring(i + 9).trim();
		i = line.lastIndexOf("\\");
		if (i < 0 || i >= line.length() - 1) {
			i = line.lastIndexOf("/");
			if (line.equals("\"\"")) {
				return "";
			}
			if (i < 0 || i >= line.length() - 1) {
				return line;
			}
		}
		return line.substring(i + 1, line.length() - 1);
	}

	private String getKey(String line) { // 從描述字符串中分離出字段??
		if (line == null) {
			return "";
		}
		int i = line.indexOf("name=");
		line = line.substring(i + 5).trim();
		return line.substring(1, line.length() - 1);
	}

	public static String[] split(String strOb, String mark) {
		if (strOb == null) {
			return null;
		}
		StringTokenizer st = new StringTokenizer(strOb, mark);
		ArrayList tmp = new ArrayList();
		while (st.hasMoreTokens()) {
			tmp.add(st.nextToken());
		}
		String[] strArr = new String[tmp.size()];
		for (int i = 0; i < tmp.size(); i++) {
			strArr[i] = (String) tmp.get(i);
		}
		return strArr;
	}

	public static void downLoad(String filePath, HttpServletResponse response,
			boolean isOnLine) throws Exception {
		File f = new File(filePath);
		if (!f.exists()) {
			response.sendError(404, "File not found!");
			return;
		}
		BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
		byte[] buf = new byte[1024];
		int len = 0;

		response.reset(); // 非常重要
		if (isOnLine) { // 在線打開方式
			URL u = new URL("file:///" + filePath);
			response.setContentType(u.openConnection().getContentType());
			response.setHeader("Content-Disposition", "inline; filename="
					+ f.getName());
			// 文件名應該編碼成UTF-8
		} else { // 純下載方??
			response.setContentType("application/x-msdownload");
			response.setHeader("Content-Disposition", "attachment; filename="
					+ f.getName());
		}
		OutputStream out = response.getOutputStream();
		while ((len = br.read(buf)) > 0)
			out.write(buf, 0, len);
		br.close();
		out.close();
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合一区二区三区| 欧美午夜精品免费| 午夜精品爽啪视频| 一区二区在线观看视频| 亚洲精品高清在线| 亚洲二区在线视频| 日韩国产欧美视频| 青青草原综合久久大伊人精品| 午夜国产精品一区| 日韩高清中文字幕一区| 美国毛片一区二区| 精品一区二区三区免费| 国产99久久久国产精品潘金| 成人h版在线观看| 欧美亚洲国产一区二区三区| 欧美日韩中字一区| 欧美白人最猛性xxxxx69交| 久久日韩精品一区二区五区| 国产精品视频免费看| 一区二区三区成人| 亚洲高清中文字幕| 国产一区二区三区日韩| 97精品久久久午夜一区二区三区 | 久久www免费人成看片高清| 激情综合网激情| 99久久久国产精品| 欧美日韩成人综合天天影院 | 51精品久久久久久久蜜臀| 日韩一区二区在线观看| 中文幕一区二区三区久久蜜桃| 亚洲毛片av在线| 精品亚洲成a人| 色妹子一区二区| 日韩欧美一区电影| 亚洲欧洲三级电影| 久久国产剧场电影| 色综合天天综合狠狠| 精品人在线二区三区| 亚洲乱码国产乱码精品精小说| 久久精品999| 欧美日韩一区小说| 国产精品久久久久影院色老大 | 亚洲欧美激情在线| 久久精品99久久久| 在线观看一区二区精品视频| 久久精品视频网| 日本vs亚洲vs韩国一区三区二区 | 欧美男生操女生| 国产农村妇女毛片精品久久麻豆 | 国产九色sp调教91| 91麻豆精品国产91久久久使用方法| 国产精品剧情在线亚洲| 狠狠狠色丁香婷婷综合激情| 欧美日韩国产高清一区二区| 亚洲欧美在线另类| 国产高清精品在线| 日韩欧美视频在线| 日韩精品每日更新| 欧美日韩精品二区第二页| 亚洲婷婷综合色高清在线| 国产99久久久精品| 久久婷婷国产综合精品青草| 老色鬼精品视频在线观看播放| 欧美日韩另类一区| 亚洲综合色视频| 欧美午夜在线一二页| 亚洲精品中文字幕在线观看| 91麻豆.com| 亚洲黄色在线视频| 欧美视频一区在线观看| 亚洲国产美国国产综合一区二区| 色综合天天视频在线观看| ●精品国产综合乱码久久久久| 国产成人综合视频| 国产精品天天看| 99久久久久久| 亚洲自拍另类综合| 欧美日韩一区二区在线视频| 日日夜夜免费精品视频| 日韩免费看的电影| 国模大尺度一区二区三区| 久久综合999| 成人午夜电影网站| 亚洲欧洲精品一区二区精品久久久 | 久久99国产乱子伦精品免费| 欧美岛国在线观看| 极品美女销魂一区二区三区| 久久亚洲精华国产精华液| 高清在线观看日韩| 亚洲女与黑人做爰| 欧美日韩的一区二区| 免费成人在线影院| 国产欧美精品一区二区色综合朱莉| 不卡的av电影| 亚洲一区精品在线| 日韩一级大片在线| 成人性生交大片免费看视频在线| 中文字幕一区日韩精品欧美| 欧美伊人精品成人久久综合97| 日韩av网站在线观看| 国产色产综合色产在线视频| 色婷婷激情一区二区三区| 免费在线看一区| 国产精品久久久久久久久果冻传媒| 在线观看日韩毛片| 国产一区二区三区免费看| 欧美日韩美少妇| 91香蕉国产在线观看软件| 亚洲精品国产视频| 精品乱人伦一区二区三区| 成人高清伦理免费影院在线观看| 亚洲福中文字幕伊人影院| 久久久久久亚洲综合| 色又黄又爽网站www久久| 麻豆精品国产传媒mv男同| 国产精品白丝在线| 日韩三级在线观看| 91国在线观看| 国产一区二区三区国产| 亚洲自拍另类综合| 国产欧美日本一区二区三区| 3d动漫精品啪啪一区二区竹菊 | 日韩欧美一区二区视频| 成人av免费在线| 久久成人久久爱| 亚洲成人第一页| 国产在线视频不卡二| 中文字幕av资源一区| 欧美精品自拍偷拍| 97se亚洲国产综合自在线观| 国产经典欧美精品| 蜜臀久久99精品久久久久久9| 亚洲丝袜自拍清纯另类| 久久久91精品国产一区二区精品 | 欧美国产成人精品| 日韩一区二区三免费高清| 91国偷自产一区二区三区成为亚洲经典| 精品一区二区三区在线播放视频| 一级中文字幕一区二区| 亚洲视频资源在线| 中文字幕中文字幕中文字幕亚洲无线 | 91免费看`日韩一区二区| 国产伦精品一区二区三区免费| 日韩高清在线观看| 亚洲成人激情社区| 亚洲一区免费观看| 一区二区在线观看免费| 一区二区三区在线观看动漫| 国产精品丝袜91| 亚洲欧洲性图库| 日韩码欧中文字| 亚洲精品视频观看| 亚洲精品高清在线观看| 一区二区三区久久久| 亚洲一区二区偷拍精品| 亚洲综合色网站| 午夜精品一区二区三区免费视频| 亚洲成av人片一区二区梦乃| 香蕉影视欧美成人| 日韩综合小视频| 麻豆91免费看| 国产成人精品网址| www.性欧美| 欧美系列在线观看| 欧美日本一区二区三区四区| 91精品国产91久久久久久最新毛片 | 不卡欧美aaaaa| 欧美伊人精品成人久久综合97| 欧美日韩国产综合草草| 日韩精品专区在线影院重磅| 久久久久久一二三区| 亚洲人成小说网站色在线 | 91精品在线一区二区| 欧美成人乱码一区二区三区| 国产免费久久精品| 一区二区三区四区激情| 人人精品人人爱| 国产精品996| 欧美四级电影在线观看| 精品成人在线观看| 亚洲视频网在线直播| 美日韩一区二区| 成人av在线观| 日韩一区二区三区免费看| 国产视频一区二区在线观看| 亚洲一级在线观看| 国产一区999| 欧美三级乱人伦电影| 国产日韩欧美激情| 亚洲一区二区三区四区在线免费观看 | 欧美在线观看视频在线| 日韩一区二区中文字幕| 国产精品免费看片| 首页综合国产亚洲丝袜| 国产91清纯白嫩初高中在线观看| 欧美亚洲综合另类| 国产精品网站在线播放| 蜜臀99久久精品久久久久久软件| av一二三不卡影片| 欧美成人国产一区二区|