java使用uploadify上传文件
一、简介
Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示;可以上传多个文件;
详细的使用方法网上有很多,建议到官网参考,这里仅仅展示其使用的效果;
官网:www.uploadify.com(注:本人今天就进入了一次官网,之后再也进不去了……);
在官网下载最新的版本;但是本人下载Uploadify所需的所有JS最新文件,不知为何原因不能正确显示,只好将原有项目的JS文件拷贝进自己的项目中,其中必须的文件:jquery-1.4.2.min.js;
jquery.uploadify.v2.1.0.min.js;swfobject.js;uploadify.swf;
其中swfobject.js这个JS是用于在HTML中方面插入Adobe Flash媒体资源(*.swf文件)的独立、敏捷的JavaScript模块,该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种 主流浏览器对Flash插件的支持情况。
以上所需的JS文件本人全部在官网下载最新的版本,但是使用失败,我能力有限只能归罪于版本的兼容;便使用了原有的文件;
二、有了必须的资源之后,就是将所需的文件导入:
下图便为项目的目录结构
项目准备好之后,便开始构建上传的功能了;当然要将需要的文件在jsp页面说明;
首先index.js
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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><base href="<%=basePath%>"><title>更改头像</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><link rel="stylesheet" href="css/default.css" type="text/css"></link><link rel="stylesheet" href="css/uploadify.css" type="text/css"></link><link rel="stylesheet" href="css/jquery.Jcrop.css" type="text/css"></link><script type="text/javascript" src="js/jquery-1.4.2.min.js"></script><script type="text/javascript" src="js/jquery.uploadify.v2.1.0.min.js"></script><script type="text/javascript" src="js/swfobject.js"></script><script type="text/javascript" src="js/fileupload.js"></script>//fileupload.js是自己封装的JS文件,主要便是使用uploadify插件</head><body><div> </div><div style="font-size: 15px;">图片文件:   <input type="file" name="file" id="file" /></div><input type="button" id="uploadFile" value="上传文件"><input type="button" id="cancelUpload" value="取消上传"><div id="fileList" style="height:51px;"></div>
</table></body>
</html>
这个index.jsp的预览效果图如下:
这里使用uploadify插件的操作封装成JS文件也放在了js目录下(上面的截图中有被涂鸦了,嘿嘿),代码如下:
$(document).ready(function() {$("#file").uploadify({'uploader' : 'js/uploadify.swf','script' : 'UploadServlet','cancelImg' : 'js/cancel.png','queueID' : 'fileList', // 和存放队列的DIV的id一致'fileDataName' : 'file', // 和以下input的name属性一致'auto' : false, // 是否自动开始'multi' : false, // 是否支持多文件上传'buttonText' : 'Brower', // 按钮上的文字'simUploadLimit' : 1, // 一次同步上传的文件数目'sizeLimit' : 3145728, // 设置单个文件大小限制 3MB'queueSizeLimit' : 1, // 队列中同时存在的文件个数限制'fileDesc' : '支持格式:jpg/jpeg', // 如果配置了以下的'fileExt'属性,那么这个属性是必须的'fileExt' : '*.jpg;*.jpeg;',// 允许的格式'displayData' : 'percentage',onComplete : function() {alert("文件上传成功");},onError : function(event, queueID, fileObj) {alert("文件:" + fileObj.name + "上传失败");}});$("#uploadFile").click(function() {$("#file").uploadifyUpload();});});
到这里其前台的工作已经做完,便着手处理业务逻辑了;
三、当选择好文件之后,uploadify组件会如下显示一个进度条:
当你点击上传文件时候,便会调用你自己的文件上传的Servlet,实现文件的上传;先展示文件上传成功的界面:
下面为文件上传的Servlet:
package com.xzb.fileUpload;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");System.out.println("文件上传开始……");String savePath = generateDir();processUpload(request, response, savePath);}/** 上传处理方法*/public void processUpload(HttpServletRequest request,HttpServletResponse response, String savePath) {DiskFileItemFactory factory = new DiskFileItemFactory();// 缓存大小为512KBfactory.setSizeThreshold(524288);// 临时文件夹factory.setRepository(new File(savePath + "/temp"));// 初始化上传控件ServletFileUpload upload = new ServletFileUpload(factory);// 文件大小最大3MBupload.setFileSizeMax(3145728);upload.setHeaderEncoding("UTF-8");List fileList = null;try {fileList = upload.parseRequest(request);} catch (FileUploadException e) {e.printStackTrace();}Iterator<FileItem> it = fileList.iterator();String name = "";String filename = "";while (it.hasNext()) {FileItem item = it.next();if (!item.isFormField()) {name = item.getName();if (name != null && !name.trim().equals("")) {filename = generateFileName(name);File file = new File(savePath + "/" + filename);try {item.write(file);String imgstr = this.getServletContext().getContextPath();imgstr = imgstr + "/upload/" + filename;response.getWriter().write("http://localhost:8080"+imgstr);} catch (Exception e) {e.printStackTrace();}}}}}/** 初始化文件存储路径*/private String generateDir() {String pathString = getServletConfig().getServletContext().getRealPath("/upload");String tempString = getServletConfig().getServletContext().getRealPath("/upload/temp");File dirPath = new File(pathString);File dirTemp = new File(tempString);if (!dirPath.exists()) {dirPath.mkdirs();}if (!dirTemp.exists()) {dirTemp.mkdirs();}return pathString;}/** 生成文件名*/private String generateFileName(String name) {long currentTime = System.currentTimeMillis();int i = (int) (Math.random() * 1000D + 1.0D);long result = currentTime + i;String filename = String.valueOf(result) + getFileExt(name);return filename;}/** 获取文件格式*/private String getFileExt(String name) {int pos = name.lastIndexOf(".");if (pos > 0) {return name.substring(pos);} else {return name;}}
}
至此,到你Servlet中所写的目录下查看是否有文件已经传来:
至此,利用组将实现文件上传,其本质这个组件并没有实现文件的上传,自己必须亲自写好上传的业务逻辑,组件只是简化并是上传界面友好罢了!只要组件的参数和方法使用恰当,便能自定义许多其他属性;
这个仅仅是一个开始,接下来还要将上传来的图片进行预览剪切,这时候会用到其他的jQuery组件,达到类似于论坛更换剪切头像的目的;
转载于:https://blog.51cto.com/seasky09/1213990
相关文章:

微软亚洲研究院成立OpenNetLab,探索以“数据为中心”AI网络研究新范式!
2020年12月18日,微软亚洲研究院宣布联合清华大学、北京大学、南京大学、兰州大学、新加坡国立大学、首尔国立大学等多所亚洲地区高校,成立OpenNetLab开放网络平台联盟。 OpenNetLab官网地址:https://opennetlab.org/ 通过为研究人员提供通用的…

圆角文本框的制作
把border:0px;outline:none;就可以清除边框。然后在外面放一个圆角div,文本框在div内居中的话能够,设置行高和text-align:center。或者也能够在背景图上放文本框。
微软收购 GitHub 两年后,大咖共论开源新生态
头图 | CSDN 下载自视觉中国被微软收购两年的GitHub,现在怎么样了?据《 2020 年度 GitHub Octoverse 报告》显示,GitHub 上开发者数量达到 5600 万,新增 6000 万个存储库以及 19 亿个 contribution。GitHub 预计到 2025 年&#x…

网页中如何获取客户端系统已安装的所有字体?
如何获取系统字体?1.首先在需要获取系统字体的网页<body>后加入以下代码:<DIV style"LEFT: 0px; POSITION: absolute; TOP: 0px"><OBJECT ID"dlgHelper" CLASSID"clsid:3050f819-98b5-11cf-bb82-00aa00bdce0b&q…

Web开发常见的软件架构
Web开发常见的软件架构 一、看需求分析,看产品PRD:Product Requirement Document 二、根据PRD和产品原型建数据库表,注意三范式要求,用工具到处数据库关系图,并快速地理清数据库思路 三、搭建项目架构,常用三层,自动…

thinkphp整合系列之gulp实现前端自动化
这又是一个一次整合终身受益;不止是终身;换个项目同样可以很方便复用;不信你看另一个项目: thinkphp整合系列之gulp实现前端自动化 虽然我等叫php程序猿;但是不可避免的是要跟html打交道的;而且php这么容易…
网上几种常见校验码图片分析
前几天受刺激了,准备把CSDN的校验码图片修改。就上网找了一些参考示例。和分析了一些校验码的功能。不敢独享,整理到一起,跟大家分享。 至于CSDN新的校验码写法,不是这里面的任何一种。也不是网上可以找到的。这个不好公开&#…

语言都是相通的,学好一门语言,再学第二门语言就很简单,记录一下我复习c语言的过程。...
语言都是相通的,学好一门语言,再学第二门语言就很简单,记录一下我复习c语言的过程。为了将本人的python培训提高一个层次,本人最近买了很多算法的书.这个书上的代码基本都是c语言实现的,c语言很久没有用了,…
百度飞桨全新升级:重磅推出PaddleHelix平台、开源框架V2.0RC,硬件生态路线图全公开...
12月20日,WAVE SUMMIT2020深度学习开发者峰会在北京举办。本届峰会,百度飞桨带来八大全新发布与升级,有支持前沿技术探索和应用的生物计算平台PaddleHelix螺旋桨,开发更加便捷的飞桨开源框架2.0 RC版,端云协同的AI集成…

Java解压zip文件(文本)压缩包
2019独角兽企业重金招聘Python工程师标准>>> 说明:由于我们的日志收集到指定服务器上,会按天压缩成一个zip格式的压缩包,但是有时候需要对这些日志进行处理,人工解压在处理,显示对于大量的日志处理是不行的…

Asp.Net 动态生成验证码
我们在设计用户登录模块时,经常会用到验证码,可以有效地防止黑客软件的恶意破解,现公开我常用的验证码的源代码,生成效果如图:。使用方法:1、在Web项目中添加一个类,如“CreateImage.cs”&#…

Hyper-v 3.0虚拟化平台群集共享磁盘无法failover的故障
碰到一个hyper-v 3.0虚拟化平台和HP存储的兼容性问题,放出来和大家分享一下。平台:windows server 2012 RTMhyper-v 3.0故障现象:生产虚拟平台宿主机意外重启,且重启后一块存储磁盘变成脱机状态,进一步测试发现宿主机上…
2020年中国AI算力报告发布:超大算法模型挑战之下,公共AI算力基建是关键
随着人工智能算法突飞猛进的发展,越来越多的模型训练需要巨量的算力支撑才能快速有效地实施。目前,如AlphaFold、GPT-3等模型已经逼近人工智能的算力极限,GPT-3的模型尺寸增大到了1750亿,数据量也达到了惊人的45TB。一方面&#x…

Spring中使用Log4j记录日志
以下内容引用自http://wiki.jikexueyuan.com/project/spring/logging-with-log4j.html: 例子: pom.xml: <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"x…

象 DEV-Club 那样的彩色校验码
要读懂这些代码主要是要了解ASP中操作二进制数据的对象ADODB.Stream!本程序主要用的就是Adodb.Stream,如果你有这个基础,就可以进一步添加更多的功能如加入杂点,渐变底色,数字行列错位,笔画短点,…

北斗时钟在国内各行业的应用前景
北斗时钟在国内各行业的应用前景 北斗时钟(GPS标准同步钟,GPS对时设备,北斗时间服务器)以北斗卫星信号作为时间源,同时可选GPS、IRIG-B码、OCX0、铷原子钟、CDMA信号等时钟源,对时精度达20nS。 上海锐呈电气有限公司产品采用表…
寻找长沙“科技之星”,CSDN星城大巡礼
2020年,长沙市委主要领导发出“软件产业再出发”的号召,并颁布了软件三年行动计划。今年5月,CSDN作为专业的IT社区,与长沙高新区签约,将全国总部落户长沙,这一战略决策,让CSDN与长沙的联结进一步…

DevDays2012 开发者日中文版资料下载
DevDays2012开发者日中文版资料已经上传到ADN网站,如果你是ADN会员,可以从下面地址下载:http://adn.autodesk.com/adn/servlet/item?siteID4814862&id21105549 作者:峻祁连邮箱:junqilian163.com 出处:…
对人脑而言,阅读计算机代码和阅读语言有何不同?
作者 | Anne Trafton 翻译 | 火火酱,责编 | 晋兆雨 出品 | AI科技大本营 头图 | 付费下载于视觉中国 神经科学家们发现,人类在解读代码时会激活一个通用的大脑区域网络,但不会激活语言处理中心。 就某些方面而言,学习计算机编程和学习一门新语…

如何在asp.net中动态生成验证码
现在越来越多的网站喜欢搞个验证码出来,而且各个语言基本上都能做到,今天我来一个C#写的! using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web…

http_build_query用法
2019独角兽企业重金招聘Python工程师标准>>> http_build_query (PHP 5) http_build_query -- 生成 url-encoded 之后的请求字符串 描述string http_build_query ( array formdata [, string numeric_prefix] ) 使用给出的关联(或下标)数组生…

《JAVA与模式》之简单工厂模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 那么简单工厂模式是…

ASP.NET MVC上传文件----uploadify的使用
课程设计需要实现上传文件模块,本来ASP.NET是有内置的控件,但是ASP.NET MVC没有,所以就有两种方法:自定义和采用第三方插件。由于时间的关系,故采用第三方插件:uploadify。 uploadify的使用必须下载相应的文件,下载地址…

QQ验证码识别源代码(C#/NET1.1)
using system; namespace qq { /// <summary> /// yzm 的摘要说明。 /// </summary> public class yzm { public yzm(public system.drawing.bitmap pic) { this.bp pic; } /// <summary> /// 将一个int值存入到4个字节的字节数组(从高地址开始…
身限辞退风波,Google AI 掌门人 Jeff Dean 不误折桂 IEEE 冯诺依曼奖
【CSDN 编者按】在 AI 圈,除了平常说的“人工智障”,“机器学习不学习”之类的,就数 Jeff Dean 的段子流传最多最广了。像什么”编译器从来不给Jeff编译警告,而是Jeff警告编译器“、“所有的指针都是指向 Jeff Dean 的”、“Jeff …

Javascript及Jquery获取元素节点以及添加和删除操作
用了javascript和jquery很久,把所有元素节点的操作总结了下,放在博客上作为记录。 Javascript获取元素的主要方式有三种 1、document.getElementById(main):表示从document中查找一个id是main的dom节点。(这个跟$(#main)的作用是一…

PHP版本发展历史
PHP版本发展历史 PHP1 PHP最初是作为一个快速、实用的工具包出现的。1994年,为了在自己的网站上增加一个小巧而实用的访客追踪系统,Rasmus Lerdorf编写了PHP的雏形程序。这是一个用Perl封装的简单工具。由于使用效果并不理想,Rasmus又用C语…
仅剩一周!!CSDN年终大放血!人人有份的大奖你确定不来?
我们的测评大赛自开展一周以来,已经收到了9位同学的优秀作品,我们的礼品数量远超参加的同学数量,所以现在参与的同学人人有大奖!这获奖的概率也太高了吧!!!还不快参与进来!ÿ…

局域网瘫痪 傀儡主机的DDoS***
接到客户求助,最近进行了一次网络“出诊”。这是一个由傀儡主机的DDos***引发的网络故障,案例比较典型,排错过程也颇曲折。笔者就还原其过程,与大家分享。1.网络环境这个客户是一家化工企业,网络规模不大。十多台交换机…

[hive] hive 内部表和外部表
1.内部表 hive (test1)> create table com_inner_person(id int,name string,age int,ctime timestamp) row format delimited fields terminated by ,; OK Time taken: 0.233 seconds hive (test1)> load data local inpath /opt/hadoop/person.data into table com_inn…