Struts2 图片上传、缩放、剪切处理 第一节
1、技术目标:
- 为项目"影片管理"加入图片上传功能
- 使用struts2完成图片上传
- 将上传的图片重命名并保存到web服务器
注意:本文所用项目为"影片管理",参看
http://hotstrong.iteye.com/blog/1156785
提示:本文示例项目已提供下载
2、MySQL数据表film(影片表)加入列imgurl(影片海报图片链接),执行如下SQL:
ALTER TABLE film ADD imgurl VARCHAR(200) DEFAULT NULL;
3、POJO类Film加入属性imgurl,代码如下:
BaseDomain为所有POJO类的基类,
package com.xxx.pojo; public class BaseDomain { /** * id */ private Long id; public Long getId() { return id; } public void setId(Long id) { this.id = id; }@Override public String toString() { return "BaseDomain [id=" + id + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; BaseDomain other = (BaseDomain) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; } }
Film(影片类),
package com.xxx.pojo; public class Film extends BaseDomain { // Fields private String fname;//影片名称 private String imgurl;//海报图片url // Constructors /** default constructor */ public Film() { } // Property accessors public String getFname() { return this.fname; } public void setFname(String fname) { this.fname = fname; } public String getImgurl() { return imgurl; } public void setImgurl(String imgurl) { this.imgurl = imgurl; } }
4、FilmMapper.xml中,添加影片与修改影片的SQL语句中加入对imgurl字段的操作,如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xxx.dao.temp.FilmMapper"> <!-- 查询所有电影信息,对应FilmMapper接口中的getAllFilm方法 --> <select id="getAllFilm" resultType="Film"> select * from film </select> <!-- 按电影编号查询电影信息,对应FilmMapper接口中的getFilmById方法 --> <select id="getFilmById" parameterType="int" resultType="Film"> select * from film where id=#{id} </select> <!-- 按要求排序 --> <select id="getAllFilmOrder" parameterType="map" resultType="Film"> select * from film where 1 = 1 <if test="orderKey != null"> order by ${orderKey} </if> </select> <!-- 添加影片 --> <insert id="insertFilm" parameterType="Film" keyProperty="id" useGeneratedKeys="true"> insert into film (fname, imgurl) values (#{fname}, #{imgurl}); </insert> <!-- 修改影片 --> <update id="updateFilm" parameterType="Film"> update film <trim prefix="set" suffixOverrides=","> <if test="fname != null"> fname = #{fname}, </if> <if test='imgurl != null and imgurl != ""'> imgurl = #{imgurl} </if> </trim> where id = #{id} </update> <!-- 删除影片 --> <delete id="deleteFilm" parameterType="int"> delete from film where id = #{id} </delete> </mapper>
5、在WebRoot(页面路径)下创建文件夹images,放一张提示图片error.gif(示例项目中提供),在影片无海报图片时显示
6、在添加、修改影片页面(insertFilm.jsp、updateFilm.jsp)中
加入文件选择对话框并设置表单属性enctype,如下:
添加影片页面效果图:
insertFilm.jsp代码,
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> <%@taglib uri="/struts-tags" prefix="s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>添加影片</title> </head> <body> <%-- enctype属性:规定在发送到服务器之前应该如何对表单数据进行编码 multipart/form-data值:不对字符编码,在使用包含文件上传控件的表单时必须使用该值 --%> <s:form action="/film/insertFilm" method="post" enctype="multipart/form-data"> 影片名称:<s:textfield name="fname" value="" /><br /> <%--文件选择框 --%> 影片海报:<s:file id="imgPhoto" name="imgPhoto"/><br /> <s:submit value=" 添加 "></s:submit> </s:form> </body> </html>
修改页面效果图:
updateFilm.jsp代码,
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> <%@taglib uri="/struts-tags" prefix="s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>修改影片</title> </head> <body> <s:form action="/film/updateFilm" method="post" enctype="multipart/form-data"> <s:hidden name="id" /> 影片名称:<s:textfield name="fname" /><br /> <%-- 处理原有图片 --%> <s:if test='imgurl != null and imgurl != ""'> <%-- 保存原有图片的信息在修改时提交 --%> <s:hidden name="imgurl"></s:hidden> <%-- 显示原有图片,onerror属性:在打不开图片时显示提示图片 --%> <img src="<s:property value="imgurl" />" width="92" height="130" onerror="javascript:this.src='<%=basePath %>/images/error.gif'" /><br /> </s:if> <%--文件选择框 --%> 影片海报:<s:file id="imgPhoto" name="imgPhoto"/><br /> <s:submit value=" 修改 "></s:submit> </s:form> </body> </html>
7、struts.xml中添加、修改影片Action的配置中加入的Struts2的文件处理拦截器,配置如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /> <constant name="struts.i18n.encoding" value="UTF-8" /> <constant name="struts.objectFactory" value="spring" /> <constant name="struts.objectFactory.spring.autoWire" value="type" /> <constant name="struts.ui.theme" value="simple"></constant> <package name="film" namespace="/film" extends="struts-default"> <!-- 获取所有影片 --> <action name="findFilm" class="filmAction" method="findFilm"> <result name="success">/manager/films.jsp</result> </action> <!-- 添加影片 --> <action name="insertFilm" class="filmAction" method="insertFilm"> <!-- 默认拦截器 --> <interceptor-ref name="defaultStack" /> <!-- 文件上传拦截器 --> <interceptor-ref name="fileUploadStack"> <!-- 配置允许上传的文件大小,单位字节(默认2M) --> <param name="maximumSize">10000000</param> <param name="allowedTypes"> image/bmp,image/png,image/gif,image/jpeg </param> </interceptor-ref> <result name="success" type="redirectAction">findFilm</result> </action> <!-- 获取影片详情 --> <action name="detailFilm" class="filmAction" method="detailFilm"> <result name="success">/manager/updateFilm.jsp</result> </action> <!-- 修改影片 --> <action name="updateFilm" class="filmAction" method="updateFilm"> <!-- 默认拦截器 --> <interceptor-ref name="defaultStack" /> <!-- 文件上传拦截器 --> <interceptor-ref name="fileUploadStack"> <!-- 配置允许上传的文件大小,单位字节(默认2M) --> <param name="maximumSize">10000000</param> <param name="allowedTypes"> image/bmp,image/png,image/gif,image/jpeg </param> </interceptor-ref> <result name="success" type="redirectAction">findFilm</result> </action> <!-- 删除影片 --> <action name="deleteFilm" class="filmAction" method="deleteFilm"> <result name="success" type="redirectAction">findFilm</result> </action> </package> </struts>
fileUploadStack拦截器的参数allowedTypes为限制上传文件的类型,文件类型与限制方式的对应关系如下:
文件类型 限制方式
==================================
.a application/octet-stream
.ai application/postscript
.aif audio/x-aiff
.aifc audio/x-aiff
.aiff audio/x-aiff
.au audio/basic
.avi video/x-msvideo
.bat text/plain
.bcpio application/x-bcpio
.bin application/octet-stream
.bmp image/x-ms-bmp
.c text/plain
.cdf application/x-cdf
.cdf application/x-netcdf
.cpio application/x-cpio
.csh application/x-csh
.css text/css
.dll application/octet-stream
.doc application/msword
.dot application/msword
.dvi application/x-dvi
.eml message/rfc822
.eps application/postscript
.etx text/x-setext
.exe application/octet-stream
.gif image/gif
.gtar application/x-gtar
.h text/plain
.hdf application/x-hdf
.htm text/html
.html text/html
.ief image/ief
.jpe image/jpeg
.jpeg image/jpeg
.jpg image/jpeg
.js application/x-javascript
.ksh text/plain
.latex application/x-latex
.m1v video/mpeg
.man application/x-troff-man
.me application/x-troff-me
.mht message/rfc822
.mhtml message/rfc822
.mif application/x-mif
.mov video/quicktime
.movie video/x-sgi-movie
.mp2 audio/mpeg
.mp3 audio/mpeg
.mpa video/mpeg
.mpe video/mpeg
.mpeg video/mpeg
.mpg video/mpeg
.ms application/x-troff-ms
.nc application/x-netcdf
.nws message/rfc822
.o application/octet-stream
.obj application/octet-stream
.oda application/oda
.p12 application/x-pkcs12
.p7c application/pkcs7-mime
.pbm image/x-portable-bitmap
.pdf application/pdf
.pfx application/x-pkcs12
.pgm image/x-portable-graymap
.pl text/plain
.png image/png
.pnm image/x-portable-anymap
.pot application/vnd.ms-powerpoint
.ppa application/vnd.ms-powerpoint
.ppm image/x-portable-pixmap
.pps application/vnd.ms-powerpoint
.ppt application/vnd.ms-powerpoint
.ps application/postscript
.pwz application/vnd.ms-powerpoint
.py text/x-python
.pyc application/x-python-code
.pyo application/x-python-code
.qt video/quicktime
.ra audio/x-pn-realaudio
.ram application/x-pn-realaudio
.ras image/x-cmu-raster
.rdf application/xml
.rgb image/x-rgb
.roff application/x-troff
.rtx text/richtext
.sgm text/x-sgml
.sgml text/x-sgml
.sh application/x-sh
.shar application/x-shar
.snd audio/basic
.so application/octet-stream
.src application/x-wais-source
.sv4cpio application/x-sv4cpio
.sv4crc application/x-sv4crc
.swf application/x-shockwave-flash
.t application/x-troff
.tar application/x-tar
.tcl application/x-tcl
.tex application/x-tex
.texi application/x-texinfo
.texinfo application/x-texinfo
.tif image/tiff
.tiff image/tiff
.tr application/x-troff
.tsv text/tab-separated-values
.txt text/plain
.ustar application/x-ustar
.vcf text/x-vcard
.wav audio/x-wav
.wiz application/msword
.wsdl application/xml
.xbm image/x-xbitmap
.xlb application/vnd.ms-excel
.xls application/excel
.xls application/vnd.ms-excel
.xml text/xml
.xpdl application/xml
.xpm image/x-xpixmap
.xsl application/xml
.xwd image/x-xwindowdump
.zip application/zip
8、在FilmAction中加入一组与文件上传相关的属性,加入uploadFile方法,在添加、修改操作前调用uploadFile方法处理图片,代码如下:
package com.xxx.web.struts.action; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Random; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import org.springframework.beans.factory.annotation.Autowired; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.xxx.pojo.Film; import com.xxx.service.FilmService; @SuppressWarnings("serial") public class FilmAction extends ActionSupport implements ModelDriven<Film> { //业务逻辑对象 @Autowired private FilmService filmService; //封装查询结果 private List<Film> filmList; //封装页面提交的表单数据 private Film film = new Film(); //图片服务器url public static final String IMAGE_SERVER_URL = "http://localhost:8080/mysit"; /* 文件上传相关属性 */ private File imgPhoto;// 对应页面的<s:file id="imgPhoto" name="imgPhoto"/> private String contentType;// 上传文件的MIME类型,由struts设置 private String fileName;// 上传文件的文件名(该文件名不包括文件的路径),由struts设置 /* 文件上传相关属性的getter/setter */ public File getImgPhoto() { return imgPhoto; } public void setImgPhoto(File imgPhoto) { this.imgPhoto = imgPhoto; } /* * 注意:contentType与fileName的getter/setter, * 名称前需要加ImgPhoto,这样设置struts才能识别 */ public String getImgPhotoContentType() { return contentType; } public void setImgPhotoContentType(String contentType) { this.contentType = contentType; } public String getImgPhotoFileName() { return fileName; } public void setImgPhotoFileName(String fileName) { this.fileName = fileName; } /** * 处理上传的文件 */ private void uploadFile(){ //判断文件是否上传 if (this.imgPhoto == null || this.fileName == null || this.fileName.equals("")) {//没有上传文件 return; } /*生成一个随机文件名*/ // 生成随机数 Random rand = new Random(); int random = rand.nextInt(); random = random > 0 ? random : (-1) * random;// 随机负数转为正数 // 获取当前时间 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmss"); //将当前时间转换为yyyyMMddHHmmss格式 String currentTime = sdf.format(date); //设置文件名(新文件名 = 当前时间 + 随机数 + 上传文件的后缀名) String imageFileName = currentTime + random + fileName.substring(fileName.lastIndexOf(".")); /*设置上传文件的保存路径*/ //获取web服务器工作路径 String realPath = ServletActionContext.getServletContext().getRealPath("/images"); //文件的存放位置 = web服务器中项目的images路径 + 新文件名 File destinationFile = new File(realPath + "/" + imageFileName); //将上传文件拷贝到web服务器 try { FileUtils.copyFile(this.imgPhoto, destinationFile); } catch (IOException e) { e.printStackTrace(); } /* 将上传图片的完整url设置给film对象,在后续的添加操作中保存到数据库, 设置完整url的目的是便于以后使用单独的图片服务器保存图片,前台页面 可直接读取这个url呈现图片,图片服务器的url可设置到配置文件中,这里 用一个静态变量来保存 */ this.film.setImgurl(IMAGE_SERVER_URL + "/images/" + imageFileName); } /** * 获取所有的电影 * @return * @throws Exception */ public String findFilm() throws Exception { this.filmList = this.filmService.getAllFilm(); return SUCCESS; } /** * 根据影片ID获取影片信息 * @return * @throws Exception */ public String detailFilm() throws Exception { int id = film.getId().intValue(); Film film = this.filmService.getFilmById(id); this.film.setFname(film.getFname()); this.film.setImgurl(film.getImgurl()); return SUCCESS; } /** * 添加影片 * @return * @throws Exception */ public String insertFilm() throws Exception { //处理上传图片 this.uploadFile(); this.filmService.insertFilm(film); return SUCCESS; } /** * 修改影片 * @return * @throws Exception */ public String updateFilm() throws Exception { //处理上传图片 this.uploadFile(); this.filmService.updateFilm(film); return SUCCESS; } /** * 删除影片 * @return * @throws Exception */ public String deleteFilm() throws Exception { int id = film.getId().intValue(); this.filmService.deleteFilm(id); return SUCCESS; } public Film getModel() { return film; } public List<Film> getFilmList() { return filmList; } public void setFilmList(List<Film> filmList) { this.filmList = filmList; } }
9、在films.jsp页面的影片列表中呈现出图片,如下:
影片列表页面效果图:
films.jsp代码:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> <%@taglib uri="/struts-tags" prefix="s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>信息操作</title> </head> <body> <s:form action="/film/findFilm" method="post"> <s:submit value=" 获取所有影片信息 "></s:submit> </s:form> <a href="<%=basePath %>manager/insertFilm.jsp">添加影片信息</a><br /> <s:if test="filmList != null"> <table border="1" width="40%"> <tr> <th>序号</th><th>海报</th><th>影片名</th><th>操作</th> </tr> <%-- 遍历影片信息 --%> <s:iterator var="film" value="filmList" status="st"> <tr> <td><s:property value="#st.index+1" /></td> <td> <%-- 显示海报图片,onerror属性:在打不开图片时显示提示图片 --%> <img src="<s:property value="imgurl" />" width="92" height="130" onerror="javascript:this.src='<%=basePath %>/images/error.gif'" /><br /> </td> <td><s:property value="fname" /></td> <td> <s:url id="detailUrl" value="/film/detailFilm"> <s:param name="id" value="%{id}"/> </s:url> <s:a href="%{detailUrl}">[修改]</s:a> <s:url id="deleteUrl" value="/film/deleteFilm"> <s:param name="id" value="%{id}"/> </s:url> <s:a href="%{deleteUrl}">[删除]</s:a> </td> </tr> </s:iterator> </table> </s:if> </body> </html>
相关推荐
问题描述: 停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入; 当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 1.基本要求 (1)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 (2)每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。 (3)栈以顺序结构实现,队列以链表实现。 2.重点难点 重点:针对停车场问题的特点,利
精选毕设项目-人民好公仆小程序(生活+便民+政务)
精选毕设项目-相册;处理用户信息
精选毕设项目-喵喵小说
精选毕设项目-图片预览带后端
精选项目-爱靓女带后台
在科技与司法的交响曲中,智慧法院应运而生,成为新时代司法服务的新篇章。它不仅仅是一个概念,更是对法院传统工作模式的一次深刻变革。智慧法院通过移动信息化技术,为法院系统注入了强大的生命力,有效缓解了案多人少的矛盾,让司法服务更加高效、便捷。 立案、调解、审判,每一个阶段都融入了科技的智慧。在立案阶段,智慧法院利用区块链技术实现可信存证,确保了电子合同的合法性和安全性,让交易双方的身份真实性、交易安全性得到了有力见证。这不仅极大地缩短了立案时间,还为后续审判工作奠定了坚实的基础。在调解阶段,多元调解服务平台借助人工智能、自然语言处理等前沿技术,实现了矛盾纠纷的快速化解。无论是矛盾类型的多元化,还是化解主体的多元化,智慧法院都能提供一站式、全方位的服务,让纠纷解决更加高效、和谐。而在审判阶段,智能立案、智能送达、智能庭审、智能判决等一系列智能化手段的应用,更是让审判活动变得更加智能化、集约化。这不仅提高了审判效率,还确保了审判质量的稳步提升。 更为引人注目的是,智慧法院还构建了一套完善的执行体系。移动执行指挥云平台的建设,让执行工作变得更加精准、高效。执行指挥中心和信息管理中心的一体化应用,实现了信息的实时传输和交换,为执行工作提供了强有力的支撑。而执行指挥车的配备,更是让执行现场通讯信号得到了有力保障,应急通讯能力得到了显著提升。这一系列创新举措的实施,不仅让执行难问题得到了有效解决,还为构建诚信社会、保障金融法治化营商环境提供了有力支撑。智慧法院的出现,让司法服务更加贴近民心,让公平正义的阳光更加温暖人心。
西门子1200与3台台达DTK温控器通讯程序 功能:实现西门子1200 PLC对3台台达DTK温控器进行485通讯控制,在触摸屏上设定温度,读取温度 器件:西门子1200 1214DC DC DC.昆仑通态TPC7062Ti ,西门子KTP700 Basic PN,台达DTK 4848V12温控器。 说明:的是程序,带详细注释程序,西门子触摸屏程序,PLC设置和温控器设置,接线说明书。 #SIEMENS 西门子
机械设计电阻绕线焊线一体机sw18全套技术资料100%好用.zip
VB6编写的上位机源码,可实时显示曲线图,带有数据库,可以进行历史数据的保存 及 查看历史采集数据。
精选毕设项目-新浪读书
jQuery+Slick插件实现游戏人物轮播展示切换特效源码是一款通过背景图片的切换来显示不同的人物效果,轮播效果通过slick幻灯片插件来制作。效果非常棒,有需要的朋友可以直接下载使用,适应各大网站
精选毕设项目-地图查找附件
(蛐蛐voc数据)农作物病虫害识别目标检测数据集,VOC格式,蛐蛐数据集,纯手动标注,用来进行目标检测代码训练的数据。
MATLAB Simulink仿真模型 双馈风机并网频率控制仿真模型,利用下垂控制与惯性控制结合的综合惯性控制,实现电力系统的频率稳定,两台同步发电机组,具体参数可自行调节,频率波形比较可利用matlab工作区画出。
一、结题报告的类型及主要结构 结题报告是一种专门用于科研课题结题验收的实用性报告类文体,也叫研究报告。它是研究者在课题研究结束后对科研课题研究过程和研究成果进行客观、全面、实事求是的描述,是课题研究所有材料中最主要的材料,也是科研课题结题验收的主要依据。 一篇规范、合格的结题报告,需要回答好3个问题:一是“为什么要选择这项课题进行研究?”二是“这项课题是怎样进行研究的?”三是“课题研究取得哪些研究成果?” 基本结构大致包括以下部分: 第一个问题 “为什么要选择这项课题进行研究?” 1.课题提出的背景;2.课题研究的意义(包括理论意义和现实意义,这个部分也可以合并归入“课题提出的背景”部分);第二个问题“这项课题是怎样进行研究的?”3.文献综述;4.课题研究的理论依据;5.课题研究的目标;6.课题研究的主要内容;7.课题研究的对象;8.课题研究的方法;9. 课题研究的主要过程(研究的步骤); 除了第9部分外,从第1到第8部分在填报课题立项申报表、在制定课题研究方案、在开题报告中,都有要求,内容基本相同。到了撰写结题报告时,只须稍作适当修改就可以了。而第9部分,则需要通过对
内容概要:本文档重点讲述了网络安全应急响应的各项准备工作,涵盖了‘1+X’网络安全应急响应的职业技能等级证书概述、应急响应的基础知识、应急响应组织的建立、风险评估与改进、应急响应预案的制定以及详细的应急响应计划处置样例。文中详细介绍了各级职业技能的要求和任务,尤其关注如何未雨绸缪,制定完善的应急预案以应对潜在的网络安全风险;同时也探讨了如何在网络安全事件发生时,采取及时有效的应急处置措施。 适合人群:从事或有兴趣进入网络安全领域的从业人员,尤其是准备考取‘1+X’网络安全应急响应职业技能等级证书的相关人员。 使用场景及目标:帮助读者了解网络安全应急响应的基本概念及其在整个国家安全框架中的重要地位;指导读者学会如何建立健全高效的应急响应组织结构,如何进行全面的风险评估以及如何编制切实可行的应急预案;通过实例剖析,增强读者应对突发网络安全事件的能力。文档的目标在于提升读者在不同层面的专业技能,包括但不限于系统备份、日志分析、安全漏洞修复等方面的能力。 阅读建议:此文档结构清晰,内容详尽,非常适合有一定基础的技术从业者参考学习。建议读者逐章节深入了解,特别是关注自身岗位对应的技能细分类别。此外,结合实例深入理解和练习如何进行应急处置是非常有价值的,有助于提升自身的实战能力。
电动汽车动力系统匹配计算模型:输入整车参数及性能要求,一键生成驱动系统的扭矩功率峰值转速等参数。 2、整车动力经济性计算模型:包含NEDC WLTC CLTC工况,输入整车参数可生成工况电耗、百公里电耗、匀速工况续航、百公里电耗等信息。 实际项目中使用的计算仿真模型. 两个模型打包
chromedriver-linux64_122.0.6254.0
SRS构型七自由度冗余机械臂运动学建模全套matlab代码 代码主要功能: [1]. 基于臂角参数化方法求解机械臂在给定末端位姿和臂角下的关节角度; [2]. 求解机械臂在给定末端位姿下的有效臂角范围,有效即在该区间内机械臂关节角度不会超出关节限位; [3]. 以避关节限位为目标在有效臂角区间内进行最优臂角的选取,进而获取机械臂在给定末端位姿下的最优关节角度。 购前须知: 1. 代码均为个人手写,主要包含运动学建模全套代码; 2. 代码已经包含必要的注释; 包含原理推导文档,不包含绘图脚本以及urdf;