来源:http://www.cnblogs.com/goody9807/archive/2008/11/04/1326098.html

功能完全支持ie和firefox浏览器!

一般的WEB方式文件上传只能一个一个的进行上传,在某些应用上就显得很不人性化,客户们都希望能够1次选择很多文件,然后让系统把选择的文件全部上传。

这里,就将针对这个问题提出一个比较完美的解决方案,利用的技术主要有2个:Flash 和 smartupload。Flash 能够让客户一次选择多个文件,而smartupload负责将选择的文件上传到服务器上。

有些朋友看到这里,就知道了,其实就是swfupload方法,具体信息可以访问swfupload官方网站:http://www.swfupload.org/

让我们先来看看客户端的界面效果图。(多选文件,批量上传,上传进度显示)

要做到图中的效果,其实很方便,看完下面的描述,相信大家都可以实现上图中的效果了。
说明:swfupload2中通过一个png图片与flash插件进行关联,可以修改images下的png图片来(如上图中的[选择文件]图片)自定义显示自己想要的图片样子(不要修改图片名字和格式)。

如果你用的不是java环境,不要紧,只要稍作修改,同样可以使用在其他的环境中。

第1步,要进行下面的过程,必须先准备好Flash插件和smartupload。
Flash插件:相信大家的浏览器早已经安装过了,请检查版本,尽量使用最新的的flash插件。

smartupload:大家可以去看看我的另一篇文章 [上传下载组件SmartUpload使用方法] http://stephen830.javaeye.com/blog/255010 里面详细讲述了使用方法,并且提供了具体java类的下载。请先熟悉smartupload,然后再开始下面的步骤。

第2步,前台部分准备客户操作的WEB界面 ,如下[UploadFileExample.jsp、UploadFileExampleSubmit.jsp]

(关于参数 upload_url: "<%=uploadUrl.toString()%>",
要注意提交文件路径,最好用http://.../UploadFileExample.jsp格式的完整路径,即像我例子中写的那样)

UploadFileExample.jsp

Html代码
  1. < %@ page contentType ="text/html;charset=UTF-8" %>
  2. < %
  3. double perMaxSize  = 1 .5;//单个文件允许的max大小
  4. String sizeUnit  = "MB" ;//perMaxSize数据对应的单位
  5. String ext  = "*.jpg;*.jpeg;*.gif" ;//允许上传的文件类型
  6. //文件上传提交的目标页面
  7. StringBuffer uploadUrl  = new  StringBuffer("http://");
  8. uploadUrl.append(request.getHeader("Host"));
  9. uploadUrl.append(request.getContextPath());
  10. uploadUrl.append("/admin/swfuploadexample/UploadFileExampleSubmit.jsp");
  11. %>
  12. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  13. < html >
  14. < head >
  15. < title > 批量相片上传</ title >
  16. < meta  http-equiv ="Content-Type"  content ="text/html; charset=UTF-8" >
  17. < link  href ="css/default.css"  rel ="stylesheet"  type ="text/css"  />
  18. < script  type ="text/javascript"  src ="js/swfupload.js" > </ script >
  19. < script  type ="text/javascript"  src ="js/swfupload.swfobject.js" > </ script >
  20. < script  type ="text/javascript"  src ="js/swfupload.queue.js" > </ script >
  21. < script  type ="text/javascript"  src ="js/fileprogress.js" > </ script >
  22. < script  type ="text/javascript"  src ="js/handlers.js" > </ script >
  23. < script  type ="text/javascript" >
  24. var swfu;
  25. SWFUpload.onload  = function  () {
  26. var settings  = {
  27. flash_url : "js/swfupload.swf",
  28. upload_url: "< %=uploadUrl.toString()%> ",
  29. post_params: {
  30. "user_id" : "stephen830",
  31. "pass_id" : "123456"
  32. },
  33. file_size_limit : "< %=perMaxSize%>  < %=sizeUnit%> ",
  34. file_types : "< %=ext%> ",
  35. file_types_description : "< %=ext%> ",
  36. file_upload_limit : 100,
  37. file_queue_limit : 0,
  38. custom_settings : {
  39. progressTarget : "fsUploadProgress",
  40. cancelButtonId : "btnCancel",
  41. uploadButtonId : "btnUpload",
  42. myFileListTarget : "idFileList"
  43. },
  44. debug: false,
  45. auto_upload:false,
  46. // Button Settings
  47. button_image_url : "images/XPButtonUploadText_61x22.png",   // Relative to the SWF file
  48. button_placeholder_id : "spanButtonPlaceholder",
  49. button_width: 61,
  50. button_height: 22,
  51. // The event handler functions are defined in handlers.js
  52. swfupload_loaded_handler : swfUploadLoaded,
  53. file_queued_handler : fileQueued,
  54. file_queue_error_handler : fileQueueError,
  55. file_dialog_complete_handler : fileDialogComplete,
  56. upload_start_handler : uploadStart,
  57. upload_progress_handler : uploadProgress,
  58. upload_error_handler : uploadError,
  59. upload_success_handler : uploadSuccess,
  60. upload_complete_handler : uploadComplete,
  61. queue_complete_handler : queueComplete, // Queue plugin event
  62. // SWFObject settings
  63. minimum_flash_version : "9.0.28",
  64. swfupload_pre_load_handler : swfUploadPreLoad,
  65. swfupload_load_failed_handler : swfUploadLoadFailed
  66. };
  67. swfu  = new  SWFUpload(settings);
  68. }
  69. </ script >
  70. </ head >
  71. < body  bgcolor ="#FCFCFC"  topmargin ="0px"  leftmargin ="10px"  rightmargin ="10px"  scroll ="yes" >
  72. < table  width ="100%"  cellspacing ="4"  cellpadding ="4"  border ="0"  bgcolor ="#FCFCFC" >
  73. < tr >
  74. < td  class ="DH1" >
  75. < table  width ="100%"  cellspacing ="4"  cellpadding ="4"  border ="0"  bgcolor ="#FCFCFC" >
  76. < tr >
  77. < td  class ="DH2" >
  78. < STRONG > 批量上传相片 (支持的相片类型:< %=ext%> ;单个相片最大不能超过:< %=perMaxSize%>  < %=sizeUnit%> )</ STRONG >
  79. </ td > < td  class ="DH2"  align ="right" > </ td >
  80. </ tr >
  81. </ table >
  82. < div  id ="content" >
  83. < form  id ="form1"  action ="UploadFileExampleSubmit.jsp"  method ="post"  enctype ="multipart/form-data" >
  84. < table  width ="90%"  cellspacing ="0"  cellpadding ="0"  border ="0" > < tr > < td >
  85. < span  id ="spanButtonPlaceholder" > </ span >
  86. < input  id ="btnUpload"  type ="button"  value ="上传相片"  class ="btn"  />
  87. < input  id ="btnCancel"  type ="button"  value ="取消全部上传"  disabled ="disabled"  class ="btn"  /> </ td >
  88. </ tr > </ table >
  89. < table  id ="idFileList"  class ="uploadFileList" > < tr  class ="uploadTitle" > < td > < B > 文件名</ B > </ td > < td > < B > 文件大小</ B > </ td > < td  width =100px > < B > 状态</ B > </ td > < td  width =35px > &nbsp;</ td > </ tr > </ table >
  90. 等待上传 < span  id ="idFileListCount" > 0</ span >  个 ,成功上传 < span  id ="idFileListSuccessUploadCount" > 0</ span >  个
  91. < div  id ="divSWFUploadUI"  style ="visibility: hidden;" > </ div >
  92. < noscript  style ="display: block; margin: 10px 25px; padding: 10px 15px;" >
  93. 很抱歉,相片上传界面无法载入,请将浏览器设置成支持JavaScript。
  94. </ noscript >
  95. < div  id ="divLoadingContent"  class ="content"  style ="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;" >
  96. 相片上传界面正在载入,请稍后...
  97. </ div >
  98. < div  id ="divLongLoading"  class ="content"  style ="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;" >
  99. 相片上传界面载入失败,请确保浏览器已经开启对JavaScript的支持,并且已经安装可以工作的Flash插件版本。
  100. </ div >
  101. < div  id ="divAlternateContent"  class ="content"  style ="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;" >
  102. 很抱歉,相片上传界面无法载入,请安装或者升级您的Flash插件。
  103. 请访问: < a  href ="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash"  target ="_blank" > Adobe网站</ a >  获取最新的Flash插件。
  104. </ div >
  105. </ form >
  106. </ div >
  107. </ td > </ tr > </ table >
  108. </ body >
  109. </ html >
<%@ page contentType="text/html;charset=UTF-8"%>
<%
double perMaxSize = 1.5;//单个文件允许的max大小
String sizeUnit = "MB";//perMaxSize数据对应的单位
String ext = "*.jpg;*.jpeg;*.gif";//允许上传的文件类型
//文件上传提交的目标页面
StringBuffer uploadUrl = new StringBuffer("http://");
uploadUrl.append(request.getHeader("Host"));
uploadUrl.append(request.getContextPath());
uploadUrl.append("/admin/swfuploadexample/UploadFileExampleSubmit.jsp");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>批量相片上传</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="css/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/swfupload.js"></script>
<script type="text/javascript" src="js/swfupload.swfobject.js"></script>
<script type="text/javascript" src="js/swfupload.queue.js"></script>
<script type="text/javascript" src="js/fileprogress.js"></script>
<script type="text/javascript" src="js/handlers.js"></script>
<script type="text/javascript">
var swfu;
SWFUpload.onload = function () {
var settings = {
flash_url : "js/swfupload.swf",
upload_url: "<%=uploadUrl.toString()%>",
post_params: {
"user_id" : "stephen830",
"pass_id" : "123456"
},
file_size_limit : "<%=perMaxSize%> <%=sizeUnit%>",
file_types : "<%=ext%>",
file_types_description : "<%=ext%>",
file_upload_limit : 100,
file_queue_limit : 0,
custom_settings : {
progressTarget : "fsUploadProgress",
cancelButtonId : "btnCancel",
uploadButtonId : "btnUpload",
myFileListTarget : "idFileList"
},
debug: false,
auto_upload:false,
// Button Settings
button_image_url : "images/XPButtonUploadText_61x22.png", // Relative to the SWF file
button_placeholder_id : "spanButtonPlaceholder",
button_width: 61,
button_height: 22,
// The event handler functions are defined in handlers.js
swfupload_loaded_handler : swfUploadLoaded,
file_queued_handler : fileQueued,
file_queue_error_handler : fileQueueError,
file_dialog_complete_handler : fileDialogComplete,
upload_start_handler : uploadStart,
upload_progress_handler : uploadProgress,
upload_error_handler : uploadError,
upload_success_handler : uploadSuccess,
upload_complete_handler : uploadComplete,
queue_complete_handler : queueComplete, // Queue plugin event
// SWFObject settings
minimum_flash_version : "9.0.28",
swfupload_pre_load_handler : swfUploadPreLoad,
swfupload_load_failed_handler : swfUploadLoadFailed
};
swfu = new SWFUpload(settings);
}
</script>
</head>
<body bgcolor="#FCFCFC" topmargin="0px" leftmargin="10px" rightmargin="10px" scroll="yes">
<table width="100%" cellspacing="4" cellpadding="4" border="0" bgcolor="#FCFCFC">
<tr>
<td class="DH1">
<table width="100%" cellspacing="4" cellpadding="4" border="0" bgcolor="#FCFCFC">
<tr>
<td class="DH2">
<STRONG>批量上传相片 (支持的相片类型:<%=ext%>;单个相片最大不能超过:<%=perMaxSize%> <%=sizeUnit%>)</STRONG>
</td><td class="DH2" align="right"></td>
</tr>
</table>
<div id="content">
<form id="form1" action="UploadFileExampleSubmit.jsp" method="post" enctype="multipart/form-data">
<table width="90%" cellspacing="0" cellpadding="0" border="0"><tr><td>
<span id="spanButtonPlaceholder"></span>
<input id="btnUpload" type="button" value="上传相片" class="btn" />
<input id="btnCancel" type="button" value="取消全部上传" disabled="disabled" class="btn" /></td>
</tr></table>
<table id="idFileList" class="uploadFileList"><tr class="uploadTitle"><td><B>文件名</B></td><td><B>文件大小</B></td><td width=100px><B>状态</B></td><td width=35px>&nbsp;</td></tr></table>
等待上传 <span id="idFileListCount">0</span> 个 ,成功上传 <span id="idFileListSuccessUploadCount">0</span> 个
<div id="divSWFUploadUI" style="visibility: hidden;"></div>
<noscript style="display: block; margin: 10px 25px; padding: 10px 15px;">
很抱歉,相片上传界面无法载入,请将浏览器设置成支持JavaScript。
</noscript>
<div id="divLoadingContent" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">
相片上传界面正在载入,请稍后...
</div>
<div id="divLongLoading" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">
相片上传界面载入失败,请确保浏览器已经开启对JavaScript的支持,并且已经安装可以工作的Flash插件版本。
</div>
<div id="divAlternateContent" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">
很抱歉,相片上传界面无法载入,请安装或者升级您的Flash插件。
请访问: <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" target="_blank">Adobe网站</a> 获取最新的Flash插件。
</div>
</form>
</div>
</td></tr></table>
</body>
</html>

UploadFileExample.jsp对应的处理页面 --> UploadFileExampleSubmit.jsp

(1)请确保已经看完我的另一篇文章(上传下载组件SmartUpload使用方法 http://stephen830.javaeye.com/admin/blogs/255010 ),先搞好这个才能开始下面的操作
(2)写一个对应上传方法类,com.soft4j.bo.PhotoMgr.java,其中的方法就是文章下面提到的public static String fileUpload(SmartUpload su,PageContext pageContext) throws Exception {...}

这2点弄好了,ok,可以继续。(如果没有准备java文件,下面的UploadFileExampleSubmit.jsp会报错)

注意在(UploadFileExampleSubmit.jsp)中:上传成功后必须返回“successed”,失败的话则返回失败的原因。

Html代码
  1. < %@ page contentType ="text/html;charset=UTF-8" %> < %@ page import ="com.soft4j.httpupload4j.SmartUpload" %> < %@ page import ="com.soft4j.bo.PhotoMgr" %> < %
  2. String pageErrorInfo  = null ;
  3. SmartUpload su  = null ;
  4. try{
  5. su  = new  SmartUpload();
  6. su.initialize(pageContext);
  7. su.upload();
  8. pageErrorInfo  = PhotoMgr .fileUpload(su,pageContext);
  9. if(pageErrorInfo ==null){
  10. out.print("successed");
  11. }
  12. }catch(Exception e){
  13. pageErrorInfo  = e.getMessage();
  14. }finally{
  15. su  = null ;
  16. if(pageErrorInfo!=null){
  17. out.print(pageErrorInfo);
  18. }
  19. }
  20. %>
<%@ page contentType="text/html;charset=UTF-8"%><%@ page import="com.soft4j.httpupload4j.SmartUpload"%><%@ page import="com.soft4j.bo.PhotoMgr"%><%
String pageErrorInfo = null;
SmartUpload su = null;
try{
su = new SmartUpload();
su.initialize(pageContext);
su.upload();
pageErrorInfo = PhotoMgr.fileUpload(su,pageContext);
if(pageErrorInfo==null){
out.print("successed");
}
}catch(Exception e){
pageErrorInfo = e.getMessage();
}finally{
su = null;
if(pageErrorInfo!=null){
out.print(pageErrorInfo);
}
}
%>

第3步 准备后台的文件上传功能。 也就是上面文件[UploadFileExampleSubmit.jsp]中用到的[PhotoMgr.fileUpload(su,pageContext)]方法。

Java代码
  1. /**
  2. * 文件上传方法.
  3. * @param su
  4. * @param pageContext
  5. * @return
  6. * @throws Exception
  7. */
  8. public  static  String fileUpload(SmartUpload su,PageContext pageContext) throws  Exception {
  9. com.soft4j.httpupload4j.File suFile = null ;
  10. int  fileCount = 0 ;
  11. try  {
  12. //获取传递过来的参数
  13. String userId = su.getRequest().getParameter("user_id" );
  14. String passId = su.getRequest().getParameter("pass_id" );
  15. String fileExt = "" ;
  16. int  fileSize = 0 ;
  17. String AllowedExtensions = ",jpg,jpeg,gif," ;//允许上传的文件类型
  18. double  maxFileSize = 1.5 *1024 ;//单文件最大大小,单位KB
  19. //校验文件类型和大小
  20. for  (int  i=0 ; i<su.getFiles().getCount();i++) {
  21. suFile = su.getFiles().getFile(i);
  22. if  (suFile.isMissing())
  23. continue ;
  24. //校验文件大小
  25. fileSize = suFile.getSize()/1024 ;//字节转换成KB
  26. if (fileSize==0 ) fileSize=1 ;
  27. if (maxFileSize<fileSize) throw  new  Exception("单个上传相片的容量不能超过[" +maxFileSize+"KB]" );
  28. //校验文件类型
  29. if  (suFile.getFileExt() == null
  30. || "" .equals(suFile.getFileExt())) {
  31. fileExt = ",," ;
  32. } else  {
  33. fileExt = ","  + suFile.getFileExt().toLowerCase() + "," ;
  34. }
  35. if  (!"" .equals(AllowedExtensions)
  36. && AllowedExtensions.indexOf(fileExt) == -1 ) {
  37. throw  new  Exception("您上传的文件["  + suFile.getFileName()
  38. + "]的类型为系统禁止上传的文件类型,不能上传!" );
  39. }
  40. fileCount++;
  41. }
  42. if  (fileCount==0 ) throw  new  Exception("请选择上传的文件" );
  43. //准备保存文件
  44. String filePath="D://tomcat//webapps//test//photo//" ;//这里填写项目中存放上传文件的物理路径
  45. for  (int  i=0 ; i<su.getFiles().getCount();i++) {
  46. suFile = su.getFiles().getFile(i);
  47. suFile.saveAs(filePath+suFile.getFileName(),SmartUpload.SAVE_PHYSICAL);//保存文件
  48. }
  49. //成功返回null
  50. return  null ;
  51. } finally  {
  52. //
  53. }
  54. }
/**
* 文件上传方法.
* @param su
* @param pageContext
* @return
* @throws Exception
*/
public static String fileUpload(SmartUpload su,PageContext pageContext) throws Exception {
com.soft4j.httpupload4j.File suFile = null;
int fileCount = 0;
try {
//获取传递过来的参数
String userId = su.getRequest().getParameter("user_id");
String passId = su.getRequest().getParameter("pass_id");
String fileExt = "";
int fileSize = 0;
String AllowedExtensions = ",jpg,jpeg,gif,";//允许上传的文件类型
double maxFileSize = 1.5*1024;//单文件最大大小,单位KB
//校验文件类型和大小
for (int i=0; i<su.getFiles().getCount();i++) {
suFile = su.getFiles().getFile(i);
if (suFile.isMissing())
continue;
//校验文件大小
fileSize = suFile.getSize()/1024;//字节转换成KB
if(fileSize==0) fileSize=1;
if(maxFileSize<fileSize) throw new Exception("单个上传相片的容量不能超过["+maxFileSize+"KB]");
//校验文件类型
if (suFile.getFileExt() == null
|| "".equals(suFile.getFileExt())) {
fileExt = ",,";
} else {
fileExt = "," + suFile.getFileExt().toLowerCase() + ",";
}
if (!"".equals(AllowedExtensions)
&& AllowedExtensions.indexOf(fileExt) == -1) {
throw new Exception("您上传的文件[" + suFile.getFileName()
+ "]的类型为系统禁止上传的文件类型,不能上传!");
}
fileCount++;
}
if (fileCount==0) throw new Exception("请选择上传的文件");
//准备保存文件
String filePath="D://tomcat//webapps//test//photo//";//这里填写项目中存放上传文件的物理路径
for (int i=0; i<su.getFiles().getCount();i++) {
suFile = su.getFiles().getFile(i);
suFile.saveAs(filePath+suFile.getFileName(),SmartUpload.SAVE_PHYSICAL);//保存文件
}
//成功返回null
return null;
} finally {
//
}
}

备注:关于jsp页面和java方法我不做过多的说明了,应该已经比较清楚了。

附录:swfupload 文件批量上传压缩包 swfupload.zip(支持最新的flash10插件) (附件中没有java类,请自己准备1个java类,将上面的方法复制进去)

下载:

http://stephen830.javaeye.com/topics/download/58bc72da-1c10-341f-ae10-2d27b74f64bc

step-by-step多文件WEB批量上传(swfupload)的完美解决方案相关推荐

  1. WEB版一次选择多个文件进行批量上传(Plupload)的解决方案

    说明:Plupload支持多种浏览器,多种上传方式! 一般的WEB方式文件上传只能使用FileUpload控件进行一个文件一个文件的进行上传,就算是批量上传,也要把文件一个一个的添加到页面,无法如 w ...

  2. vue+elementui 同时有上传文件和批量上传文件功能,上传文件或批量上传文件后必须刷新才能再次上传文件

    报错描述: 使用element-ui的上传文件组件写一个批量上传和上传文件,但是发现每次上传文件后或者批量上传文件后,不能再次上传文件或者批量上传文件.只有进入页面第一次点击上传文件或者批量上传文件才 ...

  3. 若依实现文件多线程批量上传案例

    利用多线程处理批量上传文件,能够加快任务处理耗时. package com.ruoyi.print_system.controller;import com.ruoyi.common.core.con ...

  4. ftp服务器批量上传文件,bat批量上传ftp文件到服务器

    bat批量上传ftp文件到服务器 内容精选 换一换 CDM支持周期性自动将新增文件上传到OBS,不需要写代码,也不需要用户频繁手动上传即可使用OBS的海量存储能力进行文件备份.这里以CDM周期性备份F ...

  5. php webuploader大文件,web uploader 上传大文件总结

    由于业务需要,需要上传大文件,已有的版本无法处理IE版本,经过调研,百度的 webuploader 支持 IE 浏览器,而且支持计算MD5值,进而可以实现秒传的功能. 大文件上传主要分为三部分,预上传 ...

  6. 文件无刷新上传(swfUpload与uploadify)

    文件无刷新上传并获取保存到服务器端的路径 遇到上传文件的问题,结合之前用到过的swfUpload,又找了一个无刷新上传文件的jquery插件uploadify,写篇博客记录一下分别介绍这两个插件的实现 ...

  7. Linux SVN一次增加多个文件并批量上传

    命令行下操作svn没有使用界面形式的TortoiseSVN直观,但是不管怎样,命令行下操作svn还是有它的有点,如果你碰到一次需要svn add许多个文件怎么办?下面的命令可以帮助你解决这个问题 一次 ...

  8. 学习EasyExcel实现excel文件的批量上传的笔记

    参考官网上的内容 ​ 官网地址如下: ​ https://yuque.com/easyexcel ​ git地址: ​ https://gitcode.net/mirrors/alibaba/easy ...

  9. web页面上传大文件有没有好的解决方案

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第6期)
  2. UITextField中复制和粘贴为中文
  3. P3600-随机数生成器【dp,数学期望】
  4. Poor God Water【矩阵快速幂】
  5. kalilinux安装qt_kali linux常用软件安装
  6. automapper自动创建映射_ASP.NET Core教程:ASP.NET Core使用AutoMapper
  7. STM32:配置定时器为PWM输出模式以及编码器接口模式
  8. 3ds max 2012 VRay 2.0-3ds max 效果图设计与制作-HDRI贴图的应用
  9. 高可靠性——TSN (Time Sensitive Network 时间敏感网络) 802.1Qci 协议介绍
  10. 腾讯云联手腾讯安全玄武实验室,提供「应用克隆」漏洞免费检测服务
  11. 论文引用文献并插入编号
  12. LANP+KEEPALIVED集群(三)
  13. 【python爬虫】喜欢看小说又手头紧的小伙伴一定要看这篇文章,带你一步步制作一个小说下载器
  14. Joel Spolsky在耶鲁大学的演讲(下)
  15. 实验四:py实现求导数与隐函数偏导数
  16. 手机内核是什么要怎么刷,小白必看的手机内核刷机命令
  17. ami主板uefi_BIOS和UEFI 你真的认识?
  18. VS-c++播放声音
  19. 软件测试的软件资源,软件测试都会都用到哪些工具?
  20. 微信小程序如何使用async和await

热门文章

  1. OpenCV学习笔记之 ( 三 ) MFC显示Mat图片
  2. 变量声明和函数声明的意义详解
  3. swift5以上版本的代理的实现,详细教你书写代理
  4. mysql从一个表查出写入另一个表_sql语句 怎么从一张表中查询数据插入到另一张表中...
  5. python自学可以吗_可以自学python吗?
  6. 计算机事业单位专技岗考什么区别,事业单位管理岗和专技岗的区别(从待遇等角度)...
  7. 无法打开包括文件:“osgGA/MatrixManipulator”:No such file or directory
  8. DOF和MultiSwitch的使用
  9. Android开发之将AndroidX项目改为非androidX(android.v7.support)的方法
  10. java复用类_java复用类