Jsp面實(shí)現(xiàn)文件上傳下載_第1頁(yè)
Jsp面實(shí)現(xiàn)文件上傳下載_第2頁(yè)
Jsp面實(shí)現(xiàn)文件上傳下載_第3頁(yè)
Jsp面實(shí)現(xiàn)文件上傳下載_第4頁(yè)
Jsp面實(shí)現(xiàn)文件上傳下載_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余13頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、Jsp頁(yè)面實(shí)現(xiàn)文件上傳下載,第1頁(yè)jsp頁(yè)面實(shí)現(xiàn)文件上傳代碼開發(fā)的過(guò)程見(jiàn)用TOMCAT作簡(jiǎn)單的jspweb開發(fā)名稱:jsp頁(yè)面上傳類作者:SinNeRMail:vogoalsat特點(diǎn):1可以多文件上傳;2返回上傳后的文件名;3form表單中的其他參數(shù)也可以得到。先貼上傳類,JspFileUploadpackagecom.vogoal.util;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.text.

2、SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importjava.util.Hashtable;importjavax.servlet.ServletInputStream;importjavax.servlet.http.HttpServletRequest;/* vogoalAPI1.0* AutherSinNeR* * mail:vogoals*/* JSP上傳文件類* authorSinNeR* version1.0*/publicclassJspFileUpload/*request對(duì)象*/priva

3、teHttpServletRequestrequest=null;/*上傳文件的路徑*/privateStringuploadPath=null;/*每次讀取得字節(jié)的大小*/privatestaticintBUFSIZE=1024*8;/*存儲(chǔ)參數(shù)的Hashtable*/privateHashtableparamHt=newHasptable();/*存儲(chǔ)上傳的文件的文件名的ArrayList*/privateArrayListupdFileArr=newArrayList();設(shè)定request對(duì)象。*paramrequest對(duì)象HttpServletRequestrequest*/publ

4、icvoidsetRequest(HttpServletRequestrequest)this.request=request;/*設(shè)定文件上傳路徑。*parampath用戶指定的文件的上傳路徑。*/publicvoidsetUploadPath(Stringpath)this.uploadPath=path;/*文件上傳處理主程序。�������B* returnint操作結(jié)果0文件操作成功;1request對(duì)象不存在。2沒(méi)有設(shè)定文件保存路

5、徑或者文件保存路徑不正確;3* 沒(méi)有設(shè)定正確的enctype;4文件操作異常。* /publicintprocess()intstatus=0;/文件上傳前,對(duì)request對(duì)象,上傳路徑以及enctype進(jìn)彳fcheck。status=preCheck();/出錯(cuò)的時(shí)候返回錯(cuò)誤代碼。if(status!=0)returnstatus;try/��參數(shù)或者文件名�u��Stringname=null;/參數(shù)的valueStringvalue=null;/讀取的流是否為文件的標(biāo)志位boo

6、leanfileFlag=false;/要存儲(chǔ)的文件。FiletmpFile=null;/上傳的文件的名字StringfName=null;FileOutputStreambaos=null;BufferedOutputStreambos=null;/��存儲(chǔ)參數(shù)的HashtableparamHt=newHashtable();updFileArr=newArrayList();intrtnPos=0;bytebuffs=newbyteBUFSIZE*8;/�取得ContentTypeStringcontentType=requ

7、est.getContentType();intindex=contentType.indexOf("boundary=");Stringboundary="-"+contentType.substring(index+9);StringendBoundary=boundary+"-"/�從request對(duì)象中取得流。ServletInputStreamsis=request.getInputStream();/讀取1行while(rtnPos=sis.readLine(buffs,0,buffs.length)

8、!=-1)StringstrBuff=newString(buffs,0,rtnPos);/讀取1行數(shù)據(jù)�n��if(strBuff.startsWith(boundary)if(name!=null&&name.trim().length()>0)if(fileFlag)bos.flush();baos.close();bos.close();baos=null;bos=null;updFileArr.add(fName);elseObjectobj=paramHt.get(name);ArrayList

9、al=newArrayList();if(obj!=null)al=(ArrayList)obj;al.add(value);System.out.println(value);paramHt.put(name,al);name=newString();value=newString();fileFlag=false;fName=newString();rtnPos=sis.readLine(buffs,0,buffs.length);if(rtnPos!=-1)strBuff=newString(buffs,0,rtnPos);if(strBuff.toLowerCase().startsW

10、ith("content-disposition:form-data;")intnIndex=strBuff.toLowerCase().indexOf("name="");intnLastIndex=strBuff.toLowerCase().indexOf(""",nIndex+6);name=strBuff.substring(nIndex+6,nLastIndex);intfIndex=strBuff.toLowerCase().indexOf("filename="");if

11、(fIndex!=-1)fileFlag=true;intfLastIndex=strBuff.toLowerCase().indexOf(""",fIndex+10);fName=strBuff.substring(fIndex+10,fLastIndex);fName=getFileName(fName);if(fName=null|fName.trim().length()=0)fileFlag=false;sis.readLine(buffs,0,buffs.length);sis.readLine(buffs,0,buffs.length);sis.re

12、adLine(buffs,0,buffs.length);continue;elsefName=getFileNameByTime(fName);sis.readLine(buffs,0,buffs.length);sis.readLine(buffs,0,buffs.length);elseif(strBuff.startsWith(endBoundary)if(name!=null&&name.trim().length()>0)if(fileFlag)bos.flush();baos.close();bos.close();baos=null;bos=null;up

13、dFileArr.add(fName);elseObjectobj=paramHt.get(name);ArrayListal=newArrayList();if(obj!=null)al=(ArrayList)obj;al.add(value);paramHt.put(name,al);elseif(fileFlag)if(baos=null&&bos=null)tmpFile=newFile(uploadPath+fName);baos=newFileOutputStream(tmpFile);bos=newBufferedOutputStream(baos);baos.f

14、lush();elseSystem.out.println("test:"+value+"-"+strBuff);value=value+strBuff;catch(IOExceptione)status=4;returnstatus;privateintpreCheck()interrCode=0;if(request=null)return1;if(uploadPath=null|uploadPath.trim().length()=0)return2;elseFiletmpF=newFile(uploadPath);if(!tmpF.exists(

15、)return2;StringcontentType=request.getContentType();if(contentType.indexOf("multipart/form-data")=-1)return3;returnerrCode;publicStringgetParameter(Stringname)Stringvalue=""if(name=null|name.trim().length()=0)returnvalue;value=(paramHt.get(name)=null)?"":(String)(ArrayL

16、ist)paramHt.get(name).get(0);returnvalue;publicStringgetParameters(Stringname)if(name=null|name.trim().length()=0)returnnull;if(paramHt.get(name)=null)returnnull;ArrayListal=(ArrayList)paramHt.get(name);StringstrArr=newStringal.size();for(inti=0;i<al.size();i+)strArri=(String)al.get(i);returnstrA

17、rr;publicintgetUpdFileSize()returnupdFileArr.size();publicStringgetUpdFileNames()StringstrArr=newStringupdFileArr.size();for(inti=0;i<updFileArr.size();i+)strArri=(String)updFileArr.get(i);returnstrArr;)privateStringgetFileName(Stringinput)intfIndex=input.lastIndexOf("");if(fIndex=-1)fI

18、ndex=input.lastIndexOf("/");if(fIndex=-1)returninput;)input=input.substring(fIndex+1);returninput;)privateStringgetFileNameByTime(Stringinput)intindex=input.indexOf(".");Datedt=newDate();SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddHHmmssSSS");returninput.substring(

19、0,index)+sdf.format(dt)+input.substring(index);)說(shuō)明:這個(gè)類基本解決了上一貼的上一貼說(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自己可以得到,用戶自己取得也可以。5在文件上傳處理的時(shí)候,預(yù)先進(jìn)行了check,把一些可能出現(xiàn)的造成上傳失敗的情況拍查掉。避免該類出現(xiàn)不該出現(xiàn)的異常。HttpServletRequest對(duì)象的ge

20、tParameter6捕獲了IO異常,避免文件上傳的時(shí)候出現(xiàn)異常時(shí)程序的不友好表現(xiàn)7提供了方法返回form表單中其他參數(shù)的取得,模擬了和getParameters方法(后面這個(gè)方法是叫這個(gè)名字么-_-b),取得Parameter的名稱的方法沒(méi)有提供,是個(gè)小缺陷。8提供了方法返回上傳的文件的件數(shù)和上傳的文件名,方便用戶作其他操作?,F(xiàn)在介紹下JSP頁(yè)面中如何用這個(gè)類實(shí)現(xiàn)上傳。首先,要把這個(gè)類編譯后的class文件拷貝到WEB-INF/classes/目錄下。注意保持package的結(jié)構(gòu)在jsp頁(yè)面中引用這個(gè)類<%pageimport="com.vogoal.util.JspFile

21、Upload"%><%/初始化JspFileUploadjfu=newJspFileUpload();/設(shè)定request對(duì)象jfu.setRequest(request);/設(shè)定上傳的文件路徑j(luò)fu.setUploadPath("C:");上傳處理intrtn=cess();/取得form中其他input控件參數(shù)的值Stringusername=jfu.getParameter("username");/如果對(duì)應(yīng)同一個(gè)參數(shù)有多個(gè)input控件,返回?cái)?shù)組String口usernameArr=jfu.getParamet

22、ers("username");取得上傳的文件的名字String口fileArr=jfu.getUpdFileNames();取得上傳文件的個(gè)數(shù),這個(gè)方法有點(diǎn)雞肋intfileNumber=jfu.getUpdFileSize();下面的是測(cè)試輸出的代碼。/out.println("parameter:"+username);/out.println("parametersize:"+usernameArr.length);/out.println("fileArrsize:"+fileArr.length);/i

23、f(fileArr.length>0)/out.println("fileArr0:"+fileArr0);%>使用的時(shí)候的注意事項(xiàng):9 一定要設(shè)定request對(duì)象。10 一定要設(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ì)象。publicvoidsetRequest(HttpServletRequestrequest)設(shè)定文件上傳的路徑。publicvoidsetUploadPath(Stringpath)文件

24、上傳處理主程序。returnint操作25果0文件操作成功;1request對(duì)象不存在。2沒(méi)有設(shè)定文件保存路徑或者文件保存路徑不正確;3沒(méi)有設(shè)定正確的enctype;4文件操作異常。publicintprocess()根據(jù)name取得form表單中其他傳遞的參數(shù)的值(多個(gè)的話返回其中一個(gè))publicStringgetParameter(Stringname)根據(jù)name取得form表單中其他傳遞的參數(shù)的值(返回?cái)?shù)組,可有多個(gè))publicString口getParameters(Stringname)取得上傳成功文件的個(gè)數(shù)publicintgetUpdFileSize()取得上傳的文件名對(duì)應(yīng)

25、的數(shù)組。publicString口getUpdFileNames()注意process方法地返回值,在不是0的情況下操作失敗。以下提供測(cè)試類以及測(cè)試頁(yè)面(見(jiàn)附件):HelloPostFile.htmlHelloPostFile.jsp寫在jsp中的代碼的測(cè)試文件。HelloPostFileWithClass.htmlHelloPostFileWithClass.jsp抽出class后的測(cè)試文件。src在WEB-INF/src/class在WEB-INF/classes/另:由于這個(gè)文件被我在中文日文系統(tǒng)下編輯過(guò),注釋出現(xiàn)亂碼,所以大部分都刪掉了,見(jiàn)諒。原碼:jspUpload卜第2頁(yè)jsp頁(yè)面

26、實(shí)現(xiàn)文件下載JSP文件下載類整理完成。可以在JSP頁(yè)面中實(shí)現(xiàn)簡(jiǎn)單的下載,支持文件打包下載功能。支持將字符用或者流生成文件提供下載的功能。但是也有一些缺點(diǎn)?,F(xiàn)把這個(gè)類的基本介紹總結(jié)如下。名稱:jsp頁(yè)面下載類作者:SinNeRMail:vogoalsat特點(diǎn)及功能介紹:1支持單文件下載。支持多文件zip壓縮下載。多文件zip壓縮可在服務(wù)器保留或者刪除副本。支持將特定的字符串或者byte數(shù)組以指定的文件名提供下載。2在下載過(guò)程中需要提供response對(duì)象。并且選擇下載形式。3下載處理前先進(jìn)行check,避免出現(xiàn)錯(cuò)誤。4下載處理過(guò)程中出錯(cuò)時(shí),會(huì)報(bào)告錯(cuò)誤信息。5日文系統(tǒng)下文件名是中文時(shí)出現(xiàn)亂碼問(wèn)題。

27、6處理前需要進(jìn)行相對(duì)繁瑣的設(shè)定。現(xiàn)介紹下使用者可見(jiàn)的方法的功能。設(shè)定實(shí)現(xiàn)下載必須的response對(duì)象。publicvoidsetResponse(HttpServletResponseresponse)設(shè)定下載方式:0為普通單文件下載。1為多文件壓縮成zip包下載。2為將指定的字符串等拼接成文件內(nèi)容提供給用戶下載。publicvoidsetDownType(intfileType)設(shè)定下載時(shí)顯示給用的文件名。publicvoidsetDisFileName(StringfileName)壓縮文件下載時(shí),設(shè)定壓縮文件暫時(shí)保存的路徑(路徑為絕對(duì)路徑)publicvoidsetZipFilePat

28、h(Stringpath)壓縮文件下載時(shí),設(shè)定服務(wù)器端生成的壓縮文件是否刪除。True刪除;false保留。publicvoidsetZipDelFlag(booleanb)壓縮文件下載時(shí),設(shè)定要壓縮的文件的文件路徑(路徑為絕對(duì)路徑)publicvoidsetZipFileNames(StringfileNames)單文件下載時(shí),設(shè)定下載文件的路徑(絕對(duì)路徑)publicvoidsetDownFileName(StringfileName)將字符串生成文件內(nèi)容模擬下載時(shí),設(shè)定文件的內(nèi)容。參數(shù)為字符串(可多次調(diào)用)publicintsetFileContent(StringfileContent

29、)將字符串生成文件內(nèi)容模擬下載時(shí),設(shè)定文件的內(nèi)容。參數(shù)為byte數(shù)組(可多次調(diào)用)返回值:0操作正常;9出現(xiàn)IO異常。publicintsetFileContent(bytefileContent)將字符串生成文件內(nèi)容模擬下載時(shí),調(diào)用此方法結(jié)束文件內(nèi)容設(shè)定。返回值:0操作正常;9出現(xiàn)IO異常。publicintsetFileContentEnd()主處理函數(shù)。返回值:0處理正常;1未設(shè)定response對(duì)象。2未設(shè)定文件下載方式。3未設(shè)定要顯示的文件名。4未設(shè)定要下載的文件路徑,或者設(shè)定的下載的文件路徑不存在。9IO異常。publicintprocess()現(xiàn)在介紹不同下載模式下的簡(jiǎn)單流程:?jiǎn)?/p>

30、文件下載流程:/實(shí)例初始化JspFileDownloadjfd=newJspFileDownload();/設(shè)定response對(duì)象jfd.setResponse(response);/設(shè)定文件下載模式0單文件下載。jfd.setDownType(0);/設(shè)定顯示的文件名xxxx.xxxjfd.setDisFileName(filename);/設(shè)定要下載的文件的路徑,絕對(duì)路徑j(luò)fd.setDownFileName(filePath);/主處理函數(shù)。注意處理返回值。intresult=cess();多文件壓縮成ZIP文件下載:/實(shí)例初始化JspFileDownloadjfd=ne

31、wJspFileDownload();/設(shè)定response對(duì)象。jfd.setResponse(response);/設(shè)定下載模式1多文件壓縮成ZIP文件下載。jfd.setDownType(1);/設(shè)定顯示的文件名jfd.setDisFileName(filename);/設(shè)定要下載的文件的路徑(數(shù)組,絕對(duì)路徑)jfd.setZipFileNames(fileNames);/設(shè)定服務(wù)器端生成的zip文件是否保留。true刪除false保留,默認(rèn)為falsejfd.setZipDelFlag(true);/設(shè)定zip文件暫時(shí)保存的路徑(是文件夾)jfd.setZipFilePath(zipf

32、older);/主處理函數(shù)注意返回值Intresult=cess();將字符串生成為文件內(nèi)容,模擬文件下載:/實(shí)例初始化JspFileDownloadjfd=newJspFileDownload();/設(shè)定response對(duì)象。jfd.setResponse(response);/設(shè)定下載模式2將字符串作為文件內(nèi)容,實(shí)現(xiàn)文件下載。jfd.setDownType(2);/設(shè)定文件顯示的名稱。jfd.setDisFileName(request.getParameter("filename");/主處理函數(shù),下載前check,注意返回值out.print(jfd.

33、process();/設(shè)定要寫入文件的內(nèi)容,參數(shù)可為字符串或者byte數(shù)組。可多次調(diào)用。jfd.setFileContent(request.getParameter("name");/文件內(nèi)容設(shè)定完了,調(diào)用函數(shù)。jfd.setFileContentEnd();以上就是簡(jiǎn)單的使用介紹。下面貼出主處理類的代碼。由于在日文系統(tǒng)下編輯的文件。注釋只能寫英文,英文太差-_-b。多包涵。packagecom.vogoal.util;importjava.io.BufferedInputStream;importjava.io.File;importjava.io.FileInputS

34、tream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;importjavax.servlet.http.HttpServletResponse;/* vogoalAPI1.0* AutherSinNeR* * mail:vogoals*/* JSPFILEDOWNLOADSUPPORT* authorSinNeR*version1.0*/pub

35、licclassJspFileDownload/*requestobject*/privateHttpServletResponseresponse=null;/*filetype:-1un-setting;0normalfile;1zipfile;2stream*/privateintfileType=-1;/*filenametobedisplayed*/privateStringdisFileName=null;/*zipfilepath*/privateStringzipFilePath=null;/*filetobezipped*/privateStringzipFileNames=

36、null;privatebooleanzipDelFlag=false;/*filetobedownloaded*/privateStringdownFileName=null;/*errorcode0*/privatestaticfinalintPROCESS_OK=0;/*errorcode1*/privatestaticfinalintRESPONSE_IS_NULL=1;/*errorcode2*/privatestaticfinalintUNSET_DOWNLOADTYPE=2;/*errorcode3*/privatestaticfinalintUNSET_DIS_FILE_NAM

37、E=3;/*errorcode4*/privatestaticfinalintUNSET_DOWN_FILE_NAME=4;/*errorcode9*/privatestaticfinalintIO_EXCEPTION=9;/* setresponseobject* paramresponseresponseObject*/publicvoidsetResponse(HttpServletResponseresponse)this.response=response;/* setfiletype0normalfile;1zipfile;2stream* paramfileType*/publi

38、cvoidsetDownType(intfileType)this.fileType=fileType;/* setdisplayfilename* paramfileName*/publicvoidsetDisFileName(StringfileName)this.disFileName=fileName;/* setzipfilepath* paramfileNames*/publicvoidsetZipFilePath(Stringpath)this.zipFilePath=path;publicvoidsetZipDelFlag(booleanb)this.zipDelFlag=b;

39、/*setzipfilenames*paramfileNames*/publicvoidsetZipFileNames(StringfileNames)this.zipFileNames=fileNames;/*setdownloadfilename*paramfileName*/publicvoidsetDownFileName(StringfileName)this.downFileName=fileName;/*setfilecontent*paramfileContent*/publicintsetFileContent(StringfileContent)trybytebuffs=f

40、ileContent.getBytes("UTF-8");response.getOutputStream().write(buffs);catch(IOExceptione)returnIO_EXCEPTION;returnPROCESS_OK;/*setfilecontent*paramfileContent*/publicintsetFileContent(byte口fileContent)tryresponse.getOutputStream().write(fileContent);catch(IOExceptione)returnIO_EXCEPTION;ret

41、urnPROCESS_OK;/*setfilecontentend*/publicintsetFileContentEnd()tryresponse.getOutputStream().close();catch(IOExceptione)returnIO_EXCEPTION;returnPROCESS_OK;/* mainprocess* return* /publicintprocess()intstatus=PROCESS_OK;status=preCheck();if(status!=PROCESS_OK)returnstatus;StringfileName=disFileName;

42、response.setContentType("APPLICATION/OCTET-STREAM");response.setHeader("Content-Disposition","attachment;filename=""+fileName+""");intBUFSIZE=1024*8;intrtnPos=0;bytebuffs=newbyteBUFSIZE;FileInputStreaminStream=null;ZipOutputStreamzos=null;InputStream

43、is=null;Stringfilepath=null;tryif(fileType=0|fileType=1)if(fileType=0)filepath=downFileName;elsefilepath=zipFilePath+fileName;StringfileToZip=zipFileNames;zos=newZipOutputStream(newFileOutputStream(filepath);ZipEntryze=null;bytebuf=newbyteBUFSIZE;intreadLen=0;for(inti=0;i<fileToZip.length;i+)File

44、f=newFile(fileToZipi);ze=newZipEntry(f.getName();ze.setSize(f.length();ze.setTime(f.lastModified();zos.putNextEntry(ze);is=newBufferedInputStream(newFileInputStream(f);while(readLen=is.read(buf,0,BUFSIZE)!=-1)zos.write(buf,0,readLen);is.close();zos.close();inStream=newFileInputStream(filepath);while

45、(rtnPos=inStream.read(buffs)>0)response.getOutputStream().write(buffs,0,rtnPos);response.getOutputStream().close();inStream.close();if(zipDelFlag)FilefToDel=newFile(filepath);fToDel.delete();catch(IOExceptione)returnIO_EXCEPTION;finallytryif(inStream!=null)inStream.close();inStream=null;if(zos!=null)zos.close();zos=null;if(is!=null)is.close();is=null;catch(IOExceptione)returnstatus;/*precheck.*return*/privateintpreCheck()if(response=null)returnRESPONSE_IS_NULL;if(disFileName=null|disFileN

溫馨提示

  • 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)論