Jsp頁(yè)面實(shí)現(xiàn)文件上傳下載_第1頁(yè)
Jsp頁(yè)面實(shí)現(xiàn)文件上傳下載_第2頁(yè)
Jsp頁(yè)面實(shí)現(xiàn)文件上傳下載_第3頁(yè)
Jsp頁(yè)面實(shí)現(xiàn)文件上傳下載_第4頁(yè)
Jsp頁(yè)面實(shí)現(xiàn)文件上傳下載_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、*設(shè)定request 對(duì)象。Jsp頁(yè)面實(shí)現(xiàn)文件上傳下載卜第1頁(yè)jsp頁(yè)面實(shí)現(xiàn)文件上傳代碼開(kāi)發(fā)的過(guò)程見(jiàn) 用TOMCAT作簡(jiǎn)單的jsp web開(kāi)發(fā)名稱(chēng):jsp頁(yè)面上傳類(lèi)作者:SinNeRMail : vogoalsat特點(diǎn):1可以多文件上傳;2返回上傳后的文件名;3 form表單中的其他參數(shù)也可以得到。先貼上傳類(lèi)JspFileUploadpackage com.vogoal.util;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io0 Exce

2、ption;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Hashtable;import javax.servlet.ServletlnputStream;import javax.servlet.http.HttpServletRequest;/* vogoalAPI 1.0* Auther SinNeR* by * mail: vogoals*/ /* * JSP上傳文件類(lèi)* author SinNeR* version 1.0*/pu

3、blic class JspFileUpload /* request 對(duì)象 */private HttpServletRequest request = null;/*上傳文件的路徑*/private String uploadPath = null;/*每次讀取得字節(jié)的大小*/private static int BUFSIZE = 1024 * 8;/* 存儲(chǔ)參數(shù)的Hashtable */private Hashtable paramHt = new Hasptable();/*存儲(chǔ)上傳的文件的文件名的ArrayList */private ArrayList updFileArr =

4、new ArrayList();* param request* HttpServletRequest request 對(duì)象*/public void setRequest(HttpServletRequest request) this.request = request;/*設(shè)定文件上傳路徑。* param path* 用戶指定的文件的上傳路徑。*/public void setUploadPath(String path) this.uploadPath = path;/* 文件上傳處理主程序。���&#65533

5、;���B* return int 操作結(jié)果0文件操作成功;1 request對(duì)象不存在。2沒(méi)有設(shè)定文件保存路徑或者文件保存路徑不 正確;3* 沒(méi)有設(shè)定正確的enctype ; 4文件操作異常。*/public int status = 0;/文件上傳前,對(duì)request 對(duì)象,上傳路徑以及 enctype 進(jìn)行check。status = preCheck();/岀錯(cuò)的時(shí)候返回錯(cuò)誤代碼。if (status != 0)return status;try / � &#6553

6、3;參數(shù)或者文件名 � u& #65533;& #65533;String name = null; / 參數(shù)的valueString value = null;/讀取的流是否為文件的標(biāo)志位boolean fileFlag = false;/要存儲(chǔ)的文件。File tmpFile = null;/上傳的文件的名字String fName = null;FileOutputStream baos = null;BufferedOutputStream bos = null;/ ��存儲(chǔ)參數(shù)的 Hashtablepa

7、ramHt = new Hashtable();updFileArr = new ArrayList();int rtnPos = 0;byte buffs = new byteBUFSIZE * 8;/ � 取得 ContentTypeString contentType = request.getContentType();int index = contentType.indexOf("boundary=");String boundary = "-" + contentType.substring(index + 9);St

8、ring endBoundary = boundary + "-"/ � 從request 對(duì)象中取得流。ServletInputStream sis = request.getlnputStream();/讀取1行while (rtnPos = sis.readLine(buffs, 0, buffs .1 ength) != -1) String strBuff = new String(buffs, 0, rtnPos);/ 讀取 1 行數(shù)據(jù) �n��if (strBuff.sta

9、rtsWith(boundary) if (name != null && name.trim().length() > 0) if (fileFlag) bos.flush();baos.close();bos.close();baos = null;bos = null;updFileArr .add(fName); else Object obj = paramHt.get(name);ArrayList al = new ArrayList();if (obj != null) al = (ArrayList) obj;al.add(value);System.o

10、ut.println(value); paramHt.put(name, al);name = new String();value = new String();fileFlag = false;fName = new String();rtnPos = sis.readLine(buffs, 0, buffs .l ength);if (rtnPos != -1) strBuff = new String(buffs, 0, rtnPos);if (strBuff.toLowerCase().startsWith("content-disposition: form-data;

11、") int nIndex = strBuff.toLowerCase().indexOf("name="");int nLastIndex = strBuff.toLowerCase().indexOf(""", nIndex + 6);name = strBuff.substring(nlndex + 6, nLastIndex); int fIndex = strBuff.toLowerCase().indexOf("filename"");if (flndex != -1) fileFl

12、ag = true;int fLastIndex = strBuff.toLowerCase().indexOf(""", fIndex + 10);fName = strBuff.substring(flndex + 10, fLastIndex); fName = getFileName(fName);if (fName = null | fName.trim().length() = 0) fileFlag = false;sis.readLine(buffs, 0, buffs .l ength);sis.readLine(buffs, 0, buffs

13、.l ength);sis.readLine(buffs, 0, buffs .l ength); continue;elsefName = getFileNameByTime(fName);sis.readLine(buffs, 0, buffs .l ength);sis.readLine(buffs, 0, buffs .l ength); else if (strBuff.startsWith(endBoundary) if (name != null && name.trim().length() > 0) if (fileFlag) bos.flush();b

14、aos.close();bos.close();baos = null;bos = null;updFileArr .add(fName); else Object obj = paramHt.get(name);ArrayList al = new ArrayList();if (obj != null) al = (ArrayList) obj;al.add(value);paramHt.put(name, al); else if (fileFlag) if (baos = null && bos = null) tmpFile = new File(uploadPath

15、 + fName);baos = new FileOutputStream(tmpFile); bos = new BufferedOutputStream(baos);bos.write(buffs, 0, rtnPos);baos.flush(); else System.out.println("test:" + value + "-" + strBuff);value = value + strBuff; catch (lOException e) status = 4;return status;private int preCheck() i

16、nt errCode = 0;if ( request = null )return 1;if ( uploadPath = null | uploadPath.trim ().l ength() = 0 )return 2;elseFile tmpF = new File(uploadPath);if (!tmpF .exists。)return 2;String contentType = request.getContentType();if ( contentType.indexOf("multipart/form-data") = -1 )return 3;ret

17、urn errCode;public String getParameter(String name)String value =""if ( name = null | name.trim ().l ength() = 0 )return value;value = (paramHt.get(name) = null)?"":(String)(ArrayList)paramHt.get(name).get(O);return value;public String getParameters(String name)if ( name = null |

18、 name.trim ().l ength() = 0 )return null;if ( paramHt.get(name) = null )return null;ArrayList al = (ArrayList)paramHt.get(name);String strArr = new Stringal.size();for ( int i=O;i<al.size();i+ )strArri = (String)al.get(i);return strArr;public int getUpdFileSize()return updFileArr .size();public S

19、tring getUpdFileNames()String strArr = new StringupdFileArr.size();for ( int i=O;i<updFileArr.size();i+ )strArri = (String)updFileArr.get(i);return strArr;private String getFileName(String input)int fIndex = input.lastlndexOf("");if (fIndex = -1) fIndex = input.lastlndexOf("/"

20、);if (fIndex = -1) return input;input = input.substring(flndex + 1);return input;private String getFileNameByTime(String input)int index = input.indexOf(".");Date dt = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); return input.substring(0,index) + s

21、df.format(dt) + input.substring(index);說(shuō)明:這個(gè)類(lèi)基本解決了上一貼的上一貼說(shuō)的存在的bug和不足。主要做了如下修正。4用戶可以設(shè)定文件上傳的路徑,這里沒(méi)有用request對(duì)象的getRealPath方法來(lái)取得相對(duì)路徑,而是用了絕對(duì)路徑。是一個(gè)小敗筆。因?yàn)橛袝r(shí)候用戶只是得到服務(wù)器的一個(gè)應(yīng)用,而不知道整個(gè) 服務(wù)器的路徑。但是既然 getRealPath自己可以得到,用戶自己取得也可以。、在文件上傳處理的時(shí)候,預(yù)先進(jìn)行了check,把一些可能出現(xiàn)的造成上傳失敗的情況拍查掉。避免該類(lèi)出現(xiàn)不該出現(xiàn)的異常。"捕獲了 10異常,避免文件上傳的時(shí)候出現(xiàn)異常時(shí)程

22、序的不友好表現(xiàn)HttpServletRequest 對(duì)象的 getParameter提供了方法返回form表單中其他參數(shù)的取得,模擬了和getParameters方法(后面這個(gè)方法是叫這個(gè)名字么=b),取得Parameter的名稱(chēng)的方法沒(méi)有提供,是個(gè)小缺陷。提供了方法返回上傳的文件的件數(shù)和上傳的文件名,方便用戶作其他操作?,F(xiàn)在介紹下JSP頁(yè)面中如何用這個(gè)類(lèi)實(shí)現(xiàn)上傳。首先,要把這個(gè)類(lèi)編譯后的class文件拷貝到 WEB-INF/classes/目錄下。注意保持 package的結(jié)構(gòu)。在jsp頁(yè)面中引用這個(gè)類(lèi)v%page import="com.vogoal.util.JspFileUp

23、load"%><%/初始化JspFileUpload jfu = new JspFileUpload(); /設(shè)定request對(duì)象 jfu.setRequest(request);/設(shè)定上傳的文件路徑j(luò)fu.setUploadPath("C:");/上傳處理int rtn = cess();/取得form中其他in put控件參數(shù)的值Stri ng user name = jfu.getParameter("username");/如果對(duì)應(yīng)同一個(gè)參數(shù)有多個(gè)in put控件,返回?cái)?shù)組Stri ng user nameA

24、rr = jfu.getParameters("user name");II取得上傳的文件的名字String fileArr = jfu.getUpdFileNames();II取得上傳文件的個(gè)數(shù),這個(gè)方法有點(diǎn)雞肋int fileNumber = jfu.getUpdFileSize();下面的是測(cè)試輸出的代碼。II out.pri ntl n("parameter:" + user name);I/out.pri ntln ("parameter size:" + user nameArr.le ngth);IIout.pri nt

25、l n("fileArr size:" + fileArr.le ngth);II if (fileArr.le ngth > 0)II out.pri ntln( "fileArr 0:" + fileArr0);%>使用的時(shí)候的注意事項(xiàng):- 一定要設(shè)定 request對(duì)象。工一定要設(shè)定正確的上傳路徑。11執(zhí)行完了之后才可以得到其他參數(shù),因?yàn)閳?zhí)行了之后這些參數(shù)才被分析。1,2兩點(diǎn)如果沒(méi)有做到的話,process方法執(zhí)行的時(shí)候匯報(bào)錯(cuò)。 各個(gè)用戶可用的方法及說(shuō)明:設(shè)定 requet對(duì)象。public void setRequest(HttpSe

26、rvletRequest request)設(shè)定文件上傳的路徑。public void setUploadPath(Stri ng path)文件上傳處理主程序。return int操作結(jié)果0文件操作成功;1 request對(duì)象不存在。2沒(méi)有設(shè)定文件保存路徑或者文件保 存路徑不正確;3沒(méi)有設(shè)定正確的enctype; 4文件操作異常。public int process()根據(jù)name取得form表單中其他傳遞的參數(shù)的值(多個(gè)的話返回其中一個(gè))public String getParameter(Stri ng n ame)根據(jù)name取得form表單中其他傳遞的參數(shù)的值(返回?cái)?shù)組,可有多個(gè))pu

27、blic Strin g getParameters(Stri ng n ame)取得上傳成功文件的個(gè)數(shù)public int getUpdFileSize()取得上傳的文件名對(duì)應(yīng)的數(shù)組。public Stri ng getUpdFileNames()注意process方法地返回值,在不是0的情況下操作失敗。以下提供測(cè)試類(lèi)以及測(cè)試頁(yè)面(見(jiàn)附件):HelloPostFile.htmlHelloPostFile.jsp寫(xiě)在jsp中的代碼的測(cè)試文件。HelloPostFileWithClass.htmlHelloPostFileWithClass.jsp抽出class后的測(cè)試文件。src在WEB-IN

28、F/src/class 在WEB-INF/classes/另:由于這個(gè)文件被我在中文日文系統(tǒng)下編輯過(guò),注釋出現(xiàn)亂碼,所以大部分都刪掉了,見(jiàn)諒。原碼:jspUpload第2頁(yè)jsp頁(yè)面實(shí)現(xiàn)文件下載JSP文件下載類(lèi)整理完成。可以在JSP頁(yè)面中實(shí)現(xiàn)簡(jiǎn)單的下載,支持文件打包下載功能。支持將字符串或者流生成文件提供下載的功能。但是也有一些缺點(diǎn)。現(xiàn)把這個(gè)類(lèi)的基本介紹總結(jié)如下。名稱(chēng):jsp頁(yè)面下載類(lèi)作者:SinNeRMail : vogoalsat特點(diǎn)及功能介紹:1支持單文件下載。支持多文件zip壓縮下載。多文件zip壓縮可在服務(wù)器保留或者刪除副本。支持將特定的字符串或者byte數(shù)組以指定的文件名提供下載。

29、二在下載過(guò)程中需要提供respo nse對(duì)象。并且選擇下載形式。3下載處理前先進(jìn)行 check,避免出現(xiàn)錯(cuò)誤。-下載處理過(guò)程中出錯(cuò)時(shí),會(huì)報(bào)告錯(cuò)誤信息。、日文系統(tǒng)下文件名是中文時(shí)出現(xiàn)亂碼問(wèn)題。6處理前需要進(jìn)行相對(duì)繁瑣的設(shè)定。現(xiàn)介紹下使用者可見(jiàn)的方法的功能。設(shè)定實(shí)現(xiàn)下載必須的respo nse對(duì)象。public void setResp on se(HttpServletResp onse respon se)設(shè)定下載方式:0為普通單文件下載。1為多文件壓縮成zip包下載。2為將指定的字符串等拼接 成文件內(nèi)容提供給用戶下載。public void setDow nType(i nt fileTyp

30、e)設(shè)定下載時(shí)顯示給用的文件名。public void setDisFileName(Stri ng fileName)壓縮文件下載時(shí),設(shè)定壓縮文件暫時(shí)保存的路徑(路徑為絕對(duì)路徑)public void setZipFilePath( String path )壓縮文件下載時(shí),設(shè)定服務(wù)器端生成的壓縮文件是否刪除。True刪除;false保留。public void setZipDelFlag(boolea n b)壓縮文件下載時(shí),設(shè)定要壓縮的文件的文件路徑(路徑為絕對(duì)路徑)public void setZipFileNames(Stri ng fileNames)單文件下載時(shí),設(shè)定下載文件的路

31、徑(絕對(duì)路徑)public void setDow nFileName(Stri ng fileName)將字符串生成文件內(nèi)容模擬下載時(shí),設(shè)定文件的內(nèi)容。參數(shù)為字符串(可多次調(diào)用)public int setFileC on te nt(Stri ng fileC on te nt)將字符串生成文件內(nèi)容模擬下載時(shí),設(shè)定文件的內(nèi)容。參數(shù)為byte數(shù)組(可多次調(diào)用)返回值:0操作正常;9出現(xiàn)10異常。public int setFileContent(byte fileContent)將字符串生成文件內(nèi)容模擬下載時(shí),調(diào)用此方法結(jié)束文件內(nèi)容設(shè)定。返回值:0操作正常;9出現(xiàn)IO異常。public in

32、t setFileC ontentEn d()主處理函數(shù)。返回值:0 處理正常;1未設(shè)定response對(duì)象。2 未設(shè)定文件下載方式。3 未設(shè)定要顯示的文件名。4未設(shè)定要下載的文件路徑,或者設(shè)定的下載的文件路徑不存在。9 IO異常。public int process?,F(xiàn)在介紹不同下載模式下的簡(jiǎn)單流程:?jiǎn)挝募螺d流程:/實(shí)例初始化JspFileDownload jfd = new JspFileDownload();/ 設(shè)定 response 對(duì)象jfd.setResponse(response);/設(shè)定文件下載模式0單文件下載。jfd.setDownType(O);/設(shè)定顯示的文件名XXXX

33、.XXXjfd.setDisFileName(filename);/設(shè)定要下載的文件的路徑,絕對(duì)路徑j(luò)fd.setDownFileName(filePath);/主處理函數(shù)。注意處理返回值。int result = cess();多文件壓縮成ZIP文件下載:/實(shí)例初始化JspFileDownload jfd = new JspFileDownload();/ 設(shè)定 response 對(duì)象。jfd.setResponse(response);/設(shè)定下載模式1多文件壓縮成ZIP文件下載。jfd.setDownType(1);/設(shè)定顯示的文件名jfd.setDisFileName(fi

34、lename);/設(shè)定要下載的文件的路徑(數(shù)組,絕對(duì)路徑)jfd.setZipFileNames(fileNames);/設(shè)定服務(wù)器端生成的 zip文件是否保留。true刪除false保留,默認(rèn)為falsejfd.setZipDelFlag(true);/設(shè)定zip文件暫時(shí)保存的路徑(是文件夾)jfd.setZipFilePath(zipfolder);/主處理函數(shù)注意返回值Int result = cess();將字符串生成為文件內(nèi)容,模擬文件下載:/實(shí)例初始化JspFileDownload jfd = new JspFileDownload();/ 設(shè)定 response 對(duì)

35、象。jfd.setResponse(response);/設(shè)定下載模式2將字符串作為文件內(nèi)容,實(shí)現(xiàn)文件下載。jfd.setDownType(2);/設(shè)定文件顯示的名稱(chēng)。jfd.setDisFileName(request.getParameter("filename");/主處理函數(shù),下載前 check,注意返回值out.print(cess();/設(shè)定要寫(xiě)入文件的內(nèi)容,參數(shù)可為字符串或者byte數(shù)組??啥啻握{(diào)用。jfd.setFileContent(request.getParameter("name");/文件內(nèi)容設(shè)定完了,調(diào)用函數(shù)。j

36、fd.setFileContentEnd();以上就是簡(jiǎn)單的使用介紹。下面貼出主處理類(lèi)的代碼。由于在日文系統(tǒng)下編輯的文件。注釋只能寫(xiě)英文,英文太差-_-b。多包涵。package com.vogoal.util;import java.io.BufferedlnputStream;import java.io.File;import java.io.FilelnputStream;import java.io.FileOutputStream;import java.io0 Exception;import java.ionputStream;import java.util.zip.ZipE

37、ntry;import java.util.zip.ZipOutputStream;import javax.servlet.http.HttpServletResponse;/* vogoalAPI 1.0* Auther SinNeR* by * mail: vogoals*/* JSP FILE DOWNLOAD SUPPORT* author SinNeR* version 1.0*/public class JspFileDownload /* request object */private HttpServletResponse response = null;/* file t

38、ype: -1 un-setting; 0 normal file; 1 zip file ;2 stream*/ private int fileType = -1;/* file name to be displayed */private String disFileName = null;/* zip file path */private String zipFilePath = null;/* file to be zipped */private String zipFileNames = null;private boolean zipDelFlag = false;/* fi

39、le to be downloaded */private String downFileName = null;/* error code 0 */private static final int PROCESS_OK = 0;/* error code 1 */private static final int RESPONSE_IS_NULL = 1;/* error code 2 */private static final int UNSET_DOWNLOADTYPE = 2;/* error code 3 */private static final int UNSET_DIS_FI

40、LE_NAME = 3;/* error code 4 */private static final int UNSET_DOWN_FILE_NAME = 4;/* error code 9 */private static final int IO_EXCEPTION = 9;* set response object* param response response Object*/public void setResponse(HttpServletResponse response) this.response = response;* set file type 0 normal f

41、ile; 1 zip file ;2 stream* param fileType*/public void setDownType(int fileType) this.fileType = fileType;* set display file name* param fileName*/public void setDisFileName(String fileName) this.disFileName = fileName;* set zip file path* param fileNames*/public void setZipFilePath( String path ) t

42、his.zipFilePath = path;public void setZipDelFlag(boolean b)this.zipDelFlag = b;* set zip file names* param fileNames*/public void setZipFileNames(String fileNames) this.zipFileNames = fileNames;* set download file name* param fileName*/public void setDownFileName(String fileName) this.downFileName =

43、 fileName;* set file content* param fileContent*/public int setFileContent(String fileContent)trybyte buffs = fileContent.getBytes("UTF-8"); response.getOutputStream().write(buffs);catch(IOException e)return IO_EXCEPTION;return PROCESS_OK;/* set file content* param fileContent*/public int

44、setFileContent(byte fileContent)try response.getOutputStream().write(fileContent);catch(IOException e)return IO_EXCEPTION;return PROCESS_OK;/* set file content end*/public int setFileContentEnd()tryresponse.getOutputStream().close();catch(IOException e)return IO_EXCEPTION;return PROCESS_OK;/* main p

45、rocess* return*/public int process()int status = PROCESS_OK;status = preCheck();if ( status != PROCESS_OK )return status;String fileName = disFileName;response.setContentType("APPLICATION/OCTET-STREAM");response.setHeader("Content-Disposition","attachment;filename="&quo

46、t; + fileName + """); int BUFSIZE = 1024 * 8;int rtnPos = 0;byte buffs = new byte BUFSIZE ;FileInputStream inStream = null;ZipOutputStream zos = null;InputStream is = null;String filepath = null;tryif ( fileType = 0 | fileType = 1)if ( fileType = 0 )filepath = downFileName;elsefilepat

47、h = zipFilePath + fileName;String fileToZip = zipFileNames;zos=new ZipOutputStream(new FileOutputStream(filepath);ZipEntry ze=null;byte buf=new byteBUFSIZE;int readLen=0;for (int i= 0;i<fileToZip .l ength;i+)File f= new File(fileToZipi);ze=new ZipEntry(f.getName();ze.setSize(f.length();ze.setTime

48、(f.lastModified();zos.putNextEntry(ze);is=new BufferedlnputStream(new FilelnputStream(f);while (readLen=is.read(buf, 0, BUFSIZE)!=-1) zos.write(buf, 0, readLen);is.close();zos.close();inStream =new FileInputStream(filepath);while(rtnPos=inStream.read(buffs) >0) response.getOutputStream().write(bu

49、ffs,0,rtnPos);response.getOutputStream().close();inStream.close();if ( zipDelFlag )File fToDel = new File(filepath);fToDel.delete();catch(IOException e)return IO_EXCEPTION;finallytryif ( inStream != null )inStream.close();inStream = null;if ( zos != null )zos.close();zos = null;if ( is != null )is.close();is = null;catch (IOException e)return status;/* pre check.* return*/private int preCheck()if ( response = null )return RESPONSE_IS_NULL;if ( disFileName = null | disFileNam

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論