swfupload图片上传

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43849864/article/details/103488536

swfupload是啥?
  • swfupload是一个联合flash和javascript,功能非常强大的文件上传插件。
swfupload的主要特性:
  • 文件浏览对话框中可以选择多个文件; AJAX风格的上传,不用重刷新;可以在客户端调节图片大小;它使用的类命名空间兼容各种js库(i.e., jQuery, Prototype, 等.) ;支持 Flash 9 and Flash 10(2.2.0版本后取消对flash 8的支持)
  • swfupload-v2还包含了许多新特性,这里就不再赘述

本文主要讲解图片上传实例,想要深入了解swfupload的小伙伴(阅读本文前建议先做个基本了解)可戳菜鸟教程SWFUpload使用指南

swfupload图片上传实例
  • 直接进入正题!贴心的博主已经将需要的jar包及js文件打包好→[戳我获取]
  • 项目结构(项目为动态网站;注意jar包、js文件以及jsp页面的存放目录)
    在这里插入图片描述
  • css样式文件(mystyle.css)
@charset "UTF-8";
body {
	text-align: center
}

#divcss3 {
	margin-left: 500px;
	margin-right: 500px;
	margin-top: 0;
	padding-top: 25px;
	padding-bottom: 100px;
}

.img_id {
	width: 216px;
	height: 200px;
	margin-left: 150px;
	border-style: double;
}

.img_id img {
	width: 100%;
	height: 100%;
	display: flex;
	align-items: center;
	justify-content: center;
}
  • JSP页面(本案例最核心的文件)
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SwfuploadReview-demo</title>
<script src="js/swfupload/swfupload.js"></script>
<script src="js/swfupload/handlers.js"></script>
<script src="js/swfupload/jquery-1.8.3.min.js"></script>
<link rel="stylesheet" type="text/css" href="css/mystyle.css" />

<script type="text/javascript">
	var swfu;
	window.onload = function() {
		var settings_object = { //定义参数配置对象
			upload_url : "servlet/UploadHandleServlet", //接收上传的服务端url(servlet请求路径)
			flash_url : "js/swfupload/swfupload.swf", //swfupload.swf的url
			file_post_name : "Filedata",
			file_types : "*.jpg;*.png;*",
			file_size_limit : "5MB",
			file_upload_limit : 1,
			button_placeholder_id : "upload_id", //上传按钮占位符的id
			button_width : 95,
			button_height : 35,
			button_text : '<span class="button_text">点击上传</span>',
			button_text_style : '.button_text {color: #383838;font-size:20px;font-family:"微软雅黑"}',
			button_text_top_padding : 5,
			button_text_left_padding : 5,
			button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES,
			swfupload_loaded_handler : swfupload_loaded_function,
			file_dialog_complete_handler : file_dialog_complete_function, //文件对话完成处理函数
			upload_error_handler : upload_error_function, //上传失败处理函数
			upload_success_handler : upload_success_function, //上传成功处理函数
			upload_complete_handler : upload_complete_function, //上传完成处理函数
		};
		swfu = new SWFUpload(settings_object); //实例化一个SWFUpload,传入参数配置对象
	};

	/*定义各种事件监听函数*/
	function swfupload_loaded_function() {
	}

	function file_dialog_complete_function() {
		this.startUpload();
	}
	//上传失败事件监听
	function upload_error_function() {
		alert("上传失败!");
	}
	//上传完成事件监听
	function upload_complete_function() {
	}
	//上传成功事件监听
	function upload_success_function(obj, data, response) {
		var path = "upload/" + data;//回显路径
		$("#img").attr('src', path);//使用jquery修改img中src路径
		alert("已上传成功,是否显示?");
	}
	function AJAX() {
		var nickname = $("#nickname").val();
		var region = $("#region").val();
		var signature = $("#signature").val();
		// 使用ajax发送请求
		$.ajax({
			type : "POST",
			url : "servlet/TestServlet", // servlet映射地址
			statusCode : {
				404 : function() {
					alert("url地址异常!");
				}
			},
			cache : false,
			data : {nickname : nickname,region : region,signature : signature},//json对象形式
			//data : "nickname=" + nickname + "&region=" + region + "&signature="+ signature,//标准参数形式
			/* data:JSON.stringify({nickname: 'nickname', region: 'region',signature: 'signature'}),
			dataType: "json",
			contentType: 'application/json;charset=utf-8', */ //json字符串形式 后台需要结合@RequestBody解析
			success : function(result) {
				alert(result);//将后台返回结果弹出
			}
		})

	}
</script>
</head>

<body>
	<form action="servlet/TestServlet" method="post">
		<div id=divcss3 style="background-color: darkcyan; color: snow;">
			<h1 style="font-family: 楷体;">个人中心</h1>

			<p>
				&bull;&nbsp;Nickname:<input type="text" id="nickname"
					placeholder="请输入你的昵称" size="10"><br />
			</p>
			<p>&bull;&nbsp;UploadID:&nbsp;&nbsp;&nbsp;3.1415926</p>
			<p>
				&bull;&nbsp;Region:&nbsp;&nbsp;&nbsp;&nbsp;<input type="text"
					id="region" placeholder="你来自哪里呢?" size="10"><br />
			</p>
			<p>
				&bull;&nbsp;Signature:<input type="text" id="signature"
					placeholder="发布个性签名吧" size="10"><br />
			</p>

			<p>
				<input type="button" value="提交" onclick="AJAX()">&nbsp;&nbsp;<input
					type="reset" value="重置">
			</p>

			<p>&bull;&nbsp;换上你的专属头像吧</p>
			<div class="img_id">
				<img id="img" alt="" src="">
			</div>
			<div id="upload_id"></div>
		</div>
	</form>
</body>

</html>

注:function AJAX()前一部分是swfupload图片上传的关键代码,后一部分是ajax请求和form表单的使用

后台创建两个servlet类(由于使用的是post方式,所以保留doPost方法,其他删除)
  • swfupload图片上传对应的后台servlet(UploadHandleServlet.java)
package com.me.swfupload.controller;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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;

/**
 * swfupload图片上传
 * @author 浅浅
 */
@WebServlet("/UploadHandleServlet")
public class UploadHandleServlet extends HttpServlet {
	// 序列化保持版本兼容性
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 得到上传文件的保存目录,将上传的文件存放于upload目录下
		String savePath = this.getServletContext().getRealPath("/upload");
		File file = new File(savePath);
		// 判断上传文件的保存目录是否存在;不存在则创建目录
		if (!file.exists() && !file.isDirectory()) {
			file.mkdir();
		}
		// 设定缓冲区大小和存放临时文件目录,如果上传的文件小于1M,直接写入硬盘,不经过缓冲区
		DiskFileItemFactory factory = new DiskFileItemFactory();
		factory.setRepository(new File(savePath));
		factory.setSizeThreshold(1024 * 1024);
		ServletFileUpload sfu = new ServletFileUpload(factory);
		String fileName = "";
		try {
			List<FileItem> items = sfu.parseRequest(request);// 解析request请求
			Iterator<FileItem> it = items.iterator();// 获取一个迭代器中当前位置的对象
			while (it.hasNext()) {
				FileItem fi = (FileItem) it.next();
				if (!fi.isFormField()) { // 如果上传的是规定好的文件格式
					fileName = fi.getName();
					System.out.println("获取到文件名-file name=" + fileName);
					fi.write(new File(savePath, fileName));// 写入硬盘
				}
			}
		} catch (FileUploadException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		response.setCharacterEncoding("UTF-8");// 文件为中文命名时仍回传
		response.getWriter().print(fileName);// 回传src
	}
}
  • ajax请求和后台参数接收对应的servlet(TestServlet.java)
package com.me.swfupload.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * form表单后台参数接收测试
 * @author 浅浅
 */
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		String nickname = request.getParameter("nickname");
		String region = request.getParameter("region");
		String signature = request.getParameter("signature");
		System.out.println("接收到前台ajax请求!");

		if (nickname != null && !"".equals(nickname)) {
			response.getWriter().println("Success!Nickname设置完成"); // 将结果返回到前端
		} else {
			response.getWriter().println("Error!请完成Nickname设置");
		}
		if (region != null && !"".equals(region)) {
			response.getWriter().println("Success!Region设置完成"); // 将结果返回到前端
		} else {
			response.getWriter().println("Error!请完成Region设置");
		}
		if (signature != null && !"".equals(signature)) {
			response.getWriter().println("Success!Signature已添加"); // 将结果返回到前端
		} else {
			response.getWriter().println("Tips!添加属于您的Signature吧!");
		}
	}
}

  • web.xml文件如何设置?(如果页面文件为WebContent目录下的index.jsp,则默认的内容保留,添加以下servlet相关的配置)
<servlet>
		<description></description>
		<display-name>UploadHandleServlet</display-name>
		<servlet-name>UploadHandleServlet</servlet-name>
		<servlet-class>com.me.swfupload.controller.UploadHandleServlet</servlet-class>
</servlet>
	<servlet-mapping>
		<servlet-name>UploadHandleServlet</servlet-name>
		<url-pattern>/servlet/UploadHandleServlet</url-pattern>
	</servlet-mapping>

<servlet>
		<description></description>
		<display-name>TestServlet</display-name>
		<servlet-name>TestServlet</servlet-name>
		<servlet-class>com.me.swfupload.controller.TestServlet</servlet-class>
</servlet>
	<servlet-mapping>
		<servlet-name>TestServlet</servlet-name>
		<url-pattern>/servlet/TestServlet</url-pattern>
	</servlet-mapping>
效果图

在这里插入图片描述
控制台输出信息:
在这里插入图片描述

  • end
    swfupload图片上传和ajax请求后台参数接收,你get到了吗?
    想了解更多ajax,可戳我的另一篇文章→Ajax请求的data数据格式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值