




下載本文檔
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2021-2023北京重點(diǎn)校高二(上)期末歷史匯編:從明朝建立到清軍入關(guān)
- 2024年高考語(yǔ)文二輪復(fù)習(xí)專題12名句名篇默寫測(cè)含解析
- 數(shù)據(jù)治理組織模式-洞察及研究
- 谷物產(chǎn)業(yè)人才培養(yǎng)與區(qū)域經(jīng)濟(jì)-洞察闡釋
- 云安全虛擬化標(biāo)準(zhǔn)制定-洞察闡釋
- 植物精油成分提取與分離技術(shù)-洞察闡釋
- 外貿(mào)公司運(yùn)營(yíng)管理方案
- 體育健康視角下的營(yíng)養(yǎng)與運(yùn)動(dòng)科學(xué)融合研究-洞察闡釋
- 合肥共達(dá)職業(yè)技術(shù)學(xué)院《足球俱樂(lè)部》2023-2024學(xué)年第二學(xué)期期末試卷
- 甘肅農(nóng)業(yè)大學(xué)《高等分子生物學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 不穩(wěn)定型心絞痛護(hù)理診斷及護(hù)理措施
- 藥品配送運(yùn)輸流程圖解
- 腹膜透析圍手術(shù)期的護(hù)理
- 虛擬實(shí)驗(yàn)在高中生物學(xué)實(shí)驗(yàn)教學(xué)中的應(yīng)用研究
- 糖尿病足護(hù)理疑難病例討論
- 頻繁停電培訓(xùn)課件
- 2025年度數(shù)據(jù)中心制冷設(shè)備采購(gòu)與安裝施工合同范本
- 2025年廣西宏桂資本運(yùn)營(yíng)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 英語(yǔ)中國(guó)文化
- 防水工程改造翻新合同
- 心臟驟停病人的搶救與護(hù)理
評(píng)論
0/150
提交評(píng)論