现在文件上传工具多的去(不信你问百度)
所需环境:
jquery.js
ajaxfileupload.js
struts2所依赖的jar包
及struts2-json-plugin-2.1.8.1.jar
1.页面
<%@ 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 name="keywords" content="随译聊"> <meta name="description" content="随译聊"> <link rel="shortcut icon" href="favicon.ico"> <link href="css/bootstrap.min.css?v=3.3.6" rel="stylesheet"> <link href="css/font-awesome.css?v=4.4.0" rel="stylesheet"> <link href="css/animate.css" rel="stylesheet"> <link href="css/style.css?v=4.1.0" rel="stylesheet"> <!--[if lt IE 9]> <meta http-equiv="refresh" content="0;ie.html" /> <![endif]--> <script>if(window.top !== window.self){ window.top.location = window.location;}</script> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript" src="js/bootstrap.min.js"></script> <script type="text/javascript" src="js/ajaxfileupload.js"></script> <script type="text/javascript"> function ajaxFileUpload(){ $.ajaxFileUpload({ url:'pc/uploadFile/execute',//用于文件上传的服务器端请求地址 secureuri:false,//一般设置为false fileElementId:'file',//文件上传空间的id属性 <input type="file" id="file" name="file" /> dataType: 'json',//返回值类型 一般设置为json success: function (data, status) //服务器成功响应处理函数 { alert(data.data.aa);//从服务器返回的json中取出message中的数据,其中message为在struts2中action中定义的成员变量 }, error: function (data, status, e)//服务器响应失败处理函数 { alert(e); } }); } </script> </head> <body> <input type="file" id="file" name="file" /> <br /> <input type="button" value="上传" onclick="return ajaxFileUpload();"> </body> </html>
2.action.upload配置文件(记得自己配置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> <package name="pc.uploadFile" namespace="/pc/uploadFile" extends="ylr-pc"> <default-action-ref name="PcUploadFileAction"></default-action-ref> <action name="execute" class="com.ylr.pc.uploadFile.action.PcUploadFileAction" method="execute" > <result type="ajax" name="success"> <param name="contentType"> text/html </param> </result> </action> </package> </struts>
3.后台代码
package com.ylr.pc.uploadFile.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import obi.you2.common.action.BaseYou2ActionSupport; public class PcUploadFileAction extends BaseYou2ActionSupport { private static final long serialVersionUID = 572146812454l; private File file ; //具体上传文件的 引用 , 指向临时目录中的临时文件 private String fileFileName ; // 上传文件的名字 ,FileName 固定的写法 private String fileContentType ; //上传文件的类型, ContentType 固定的写法 private String message = "你已成功上传文件"; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public File getFile() { return file; } public void setFile(File file) { this.file = file; } public String getFileFileName() { return fileFileName; } public void setFileFileName(String fileFileName) { this.fileFileName = fileFileName; } public String getFileContentType() { return fileContentType; } public void setFileContentType(String fileContentType) { this.fileContentType = fileContentType; } @Override public String execute() throws Exception { logger.info("文件上传!"); String[] fileName = fileContentType.split("/"); String name = "222222222222222222222" + "." + fileName[1]; //获取文件存储路径 String path = "d:\\test\\"; File filePath = new File(path); if(!filePath.exists()){ filePath.mkdir(); } //输出流 OutputStream os = new FileOutputStream(new File(path,name)); //输入流 InputStream is = new FileInputStream(file); byte[] buf = new byte[1024]; int length = 0 ; while(-1 != (length = is.read(buf) ) ) { os.write(buf, 0, length) ; } is.close(); os.close(); logger.info("文件上传成功!"); this.setResult("aa", "8454556dfsds"); return SUCCESS; } }
注意观察html中的代码,并没有form表单。只是在按钮点击的时候触发ajaxFileUpload()方法。
需要注意的是js文件引入的先后顺序,ajaxfileupload.js依赖于jquery因此你懂的