说真的,做开发快两年了。自己感觉自己并没有多大的进步。心里很遗憾,虽然每次领导安排的任务也几乎都能完成。但是自我感觉质量部是很高。
近期发现身边的牛人同事们个个都有在维护自己的博客。每当完成一件工作就会将自己的工作总结好发出来与大家一起分享,我也知道这样做的好处。只是一直懒不愿意去写。每次都是在工作的时候东拼西凑的把工作好不容易完成,完事以后根本不想再回头去整理这些。久了以后发现自己都看不懂之前写的那些破代码了。
于是暗下决心以后一定痛定思痛、悔过自新!
这两天的工作其实没有什么技术含量、只是我太久没有接触过了、导致一时手生。说简单点仅仅是个图片上传而已。只是中途涉及到一点修改和覆盖的逻辑。
要求是这样的,在提交一条稿件时需要上传图片,图片上传到服务器上,地址存在表里。很简单的也许两年前让我写也就是一个小时的事情。可是现在却耽误了我两天让我觉得自己退化的实在有点可怕。
废话多了。开始说开发吧
首先jsp页面
上传图片,先在页面上的form表单中建个file提交对象
[flash=200,200]
[/flash]
因为用的是webwork框架所以自定义成提交都以jspa形式。和struts的*.do到action是一个意思
红色部分
multipart/form-data是提交form表单用来传输文件流用的。记得很久以前这样写过。我当时忘了写了,害我找了半天都找不着,如果不填action的file对象一直是空的。
webwork的action层
必须声明一个和页面的file提交对象名称一致的file对象
private File [color=darkred]linknewsPic[/color];
private String [color=darkred]linknewsPicFileName;[/color]//文件名称也必须以fileName结尾。不知道为什么这样。这段完全是听同事的。
//保存方法
//开始上//上传图片
if(linknewsPic!=null){
IPortalWindowService pws =(IPortalWindowService)getBean("portalWindowService");
SystemManager sm = SystemManager.getInstance();//创建读取系统文件对象
String picBasePath = sm.getPropValue("xhpPicBasePath");//读取/conf.properties";配置文件(我这里是xhpPicBasePath=/temp)在windows下Webllogic默认把地址创建在Webllogic默认的盘符下的根目录下
SimpleDateFormat sf = new SimpleDateFormat("yyyy/MM/dd");
String str = sf.format(dt);
//获取文件后缀名
String hzname = linknewsPicFileName.substring(linknewsPicFileName.length()-4);//因为jsp的js验证已经限制了文件格式。所以默认截取的这最后的后缀名为.jpg或者.gif之类的后缀。
File picFile = new File(picBasePath+ "/" + str + "/" + System.currentTimeMillis() + hzname);//创建新的file对象给定地址为刚刚读取的地址加以年月日生成的目录。文件名称以当前的时间毫秒值为名称。(内部系统不存在多人同时上传的可能所以毫秒值完全满足)
System.out.println("文件保存路径:"+picFile.getPath());
boolean isupd = saveAs(picFile.getPath());//上传方法
if(isupd){
System.out.println("链接稿图片上传成功!");
System.out.println(picFile.getAbsolutePath());
tanlink.setIMAGEDIR(picFile.getPath());
tanlink.setISCOPYURL("0");
}else{
System.out.println("链接稿图片上传失败!");
resultMap.put("modify", "链接稿图片上传失败,修改失败");
return SUCCESS;
}
}
//上传方法
public boolean saveAs(String destFilePathName) {
final int BUFFER = 2048;//缓存字节
InputStream in = null;//创建输入流对象
OutputStream out = null;//输出流对象
try {
File loadFile = new File(destFilePathName);//创建文件对象
int count;
byte data[] = new byte[BUFFER];//读取文件字节数组
File parentFile = loadFile.getParentFile();//获取要上传文件的上级目录
if (parentFile!=null && !parentFile.exists()) {
if(!parentFile.mkdirs()){//创建该文件目录包括年月日的目录
logger.warn("error mkdirs:"+parentFile.getAbsolutePath());
return false;//如果创建失败则返回
}
}
// write the files to the disk
out = new FileOutputStream(loadFile);//创建文件输入流对象
in = new FileInputStream(this.getLinknewsPic());//读取流
while ((count = in.read(data, 0, BUFFER)) != -1) {//每次写入指定字节数
out.write(data, 0, count);
}
out.flush();//清空输入流
} catch (UnknownHostException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
try {
if (in != null) {in.close();}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (out != null) {out.close();}
} catch (Exception e) {
e.printStackTrace();
}
}
return true;
}
jsp中的js验证限制文件格式
<form id="editLinkNews" action="saveLinkNews.jspa" method="post" onsubmit="return
checkForm(this);" enctype="multipart/form-data">
function checkForm(form){
if(form.linktitle.value==""){
alert("请输入稿件名称");
return false;
}
if(form.linksourceurl.value==""){
alert("请输入稿件地址");
return false;
}
if(form.news_date.value==""){
alert("稿件发布时间不填则为系统当前时间");
}
if(form.out_time.value==""){
alert("稿件过期时间不填则为系统当前时间");
}
// alert(form.elements['iscopy'].length);
var radio = form.iscopy;
for(i=0;i<radio.length;i++){
var check = radio[i].checked;
if(check){
iscopyvalue = radio[i].value;
if(iscopyvalue=="1"){
var s = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
var picValue= form.elements["coplinknewsPic"].value;
if(picValue!="" && !picValue.match(s)){
alert("请重新输入格式正确的网址再提交!");
return false;
}
}else{
var s = /^.*?\.(jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG){1}$/;
var picValue = form.elements["linknewsPic"].value;
if(picValue!="" && !picValue.match(s)){
alert("请重新选择正确的图片格式上传,支持的格式有*.jpg,*.jpeg,*.gif,*.png");
return false;
}
}
break;
}
}
}
分享到:
相关推荐
基于Php语言设计并实现了微信小程序的社区门诊管理系统。该小程序基于B/S即所谓浏览器/服务器模式,选择MySQL作为后台数据库去开发并实现一个以微信小程序的社区门诊为核心的系统以及对系统的简易介绍。 用户注册,在用户注册页面通过填写账号、密码、确认密码、姓名、性别、手机、等信息进行注册操作; 用户登录,用户通过登录页面输入账号和密码,并点击登录进行小程序登录操作。 用户登陆微信端后,可以对首页、门诊信息、我的等功能进行详细操作 门诊信息,在门诊信息页面可以查看科室名称、科室类型、医生编号、医生姓名、 职称、坐诊时间、科室图片、点击次数、科室介绍等信息进行预约挂号操作 检查信息,在检查信息页面可以查看检查项目、检查地点、检查时间、检查费用、账号、姓名、医生编号、医生姓名、是否支付、审核回复、审核状态等信息进行支付操作
白色大气风格的设计师作品模板下载.zip
工程经济学自考必备软件下载
UML课程设计报告.doc
白色大气风格响应式彩绘精品水果网站模板.zip
白色简洁风格的别墅整站网站模板.zip
白色简洁风格的APP展示动态源码下载.zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
白色大气风格的雪山旅游景区CSS3网站模板.zip
介绍 基于python开发的大模型调用基础框架(源码) 使用说明 修改配置文件 cd config vim __init__.py # 在配置文件中添加大模型调用地址,模型名称,API_KEY等配置 启动应用 应用启动分为两种模式,命令行模式和web模式 命令行模式 python main.py cli web模式 python main.py api
基于JavaWeb的小区物业管理系统源代码+数据库 负责数据库的设计和界面的设计和实现; 界面使用 BootStrap 框架,页面自适应效果,修改页面后实现各个功能模块的布局; 负责实现用户登录注册,查看小区活动公告、水电费查询、车费查询信息; 采用的技术:采用 MVC 架构,数据库用 MySql;
白色简单风格的商务企业网站模板下载.zip
1. 平台在家电和电子产品方面的营运情况如何? 2. 哪些品牌和类别销量最高? 3. 用户消费规律 4. 哪些是我们的重点用户? 5. 平台有哪些优势和不足,需要如何改进?
全平台数据库管理工具, 支持 ClickHouse, Presto, Trino, MySQL, PostgreSQL, Apache Druid, ElasticSearch...
白色大气风格的旅游整站网站模板.zip
1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用KEIL 标准库开发,当前在STM32F030C8T6运行,如果是STM32F030其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件下载时,请注意keil选择项是jlink还是stlink。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。 9、编译时请注意提示,请选择合适的编译器版本。
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
白色大气风格的红唇少女女性类网站模板.zip
白色简洁风格的UIDesign设计公司企业网站模板.rar
Linux期末考试试题.doc