JSP 实现多个文件上传的两种方法
使用plupload自定义参数实现多文件上传
这篇文章主要介绍了使用plupload自定义参数实现多文件上传的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下1、在开发中可能需要用户附件上传的功能,实现批量上传功能其实就将多个上传任务放到一个集合中,分别上传。
2,使用plupload js插件可以很轻松的实现带参数的多文件上传3、具体js实现方式<script type="text/javascript">var map={};//文件id为key,文件类型为value的集合// Custom example logicvar uploader = new plupload.Uploader({runtimes : 'html5,flash,silverlight,html4',browse_button : 'pickfiles', // you can pass in id...container : document.getElementById('container'), // ... or DOM Element itselfurl : '../action/photoUpload.jsp',flash_swf_url : '../../js/Moxie.swf',silverlight_xap_url : '../../js/Moxie.xap',filters : {max_file_size : '5mb',mime_types : [ {title : "图片类型",extensions : "jpg,gif,png"} ]},init : {PostInit : function() {document.getElementById('uploadfiles').onclick = function() {uploader.start();return false;};},BeforeUpload:function(up,file){//重点在这里,上传的时候自定义参数信息uploader.setOption("multipart_params",{"apptype":${param.type},"id":${param.id},"fileType":m ap[file.id]});},FileUploaded:function(up,file){$("#"+file.id+"btn").parent().html("上传完毕");$("#"+file.id+"btn").remove();},FilesAdded : function(up, files) {if($("#fileType").val()==1){alert("请选择附件类型!");//清空刚才选择的文件plupload.each(files,function(file) {uploader.removeFile(file.id);});return false;}plupload.each(files,function(file) {map[file.id]=$("#fileType").val();$("#uploadTable").append("<tr id='"+file.id+"tr'><td>"+$("#fileType").val()+"</td><td>"++"</t d><td><button type='button' id='"+file.id+"btn' onclick=del('"+file.id+"')>删除</button> </td><td id='"+file.id+"_progress'></td></tr>");});},UploadProgress : function(up, file) {$("#"+file.id+"_progress").html('<span>'+ file.percent + "%</span>");},Error : function(up, err) {alert("此文件上传失败!");}}});uploader.init();//根据文件id删除此文件,并且在table中删除此文件的信息function del(id){uploader.removeFile(id);$("#"+id+"tr").remove();map[id]="";}</script>宅男程序猿,文采不行,如果看着累直接复制js,注意页面上需要有:<div id="filelist"></div><div id="container"><center>提示:必须上传"商户营业执照","税务登记证明","企业法人身份证","考察照片","商户信息调查表","商户协议" 才能提交审批!</center><label>附件类型:</label> <select name="fileType" id="fileType" ><option value="1">-------请选择-----</option><option value="商户营业执照">商户营业执照</option><option value="税务登记证明">税务登记证明</option><option value="商户信息变更表">商户信息变更表</option><option value="其他">其他</option></select><button class="button" id="pickfiles">选择文件</button> <button class="button" id="uploadfiles">批量上传</button> <button class="button" onclick="window.location.reload()">刷新</button> <button class="button" onclick="window.close()">关闭窗口</button><table style="width: 600px" id="uploadTable" border="1"><tr><td>文件类型</td><td>文件名称</td><td>操作</td><td>上传进度</td></tr></table></div>以上所述是小编给大家介绍的使用plupload自定义参数实现多文件上传,希望对大家有所帮助。
JSP实用教程:文件的上传
<% SmartUpload su = new SmartUpload();
catch (Exception e){ %> <script language=javascript>
alert("只允许上传.jpg/.gif/.png/.bmp类型图片文件");
window.location='upload_image.html'; </script>
<%
su.initialize(pageContext); // 上传初始化
try{
// 设定允许上传的文件(通过扩展名限制)
su.setAllowedFilesList("jpg,png,gif,bmp");
su.upload(); // 上传文件 su.save(“/upload”); // 设置保存目录 }
上传文件处理页面:new_upload.jsp
文件上传成功 文件长度:28376 文件名:9.jpg 文件扩展名:jpg
文件上传页面:upload_new.html
<form method="post" action="new_upload.jsp" enctype="multipart/form-data" > <input type="file" name="file"> <input type="submit" name="Submit" value="上传"> </form> 知识点:表单中enctype=“multipart/form-data” 的意思,是设置表单的MIME编码。默认情况,这个编 码格式是application/x-www-form-urlencoded,不能用 于文件上传;只有设置为multipart/form-data,才能完 整的传递文件数据
JS实现多附件上传(asp.net)
JS实现多附件上传()前⼏天,⽤户提出⼀个需求-多附件上传,另外,每个上传⽂件要加⼀个别名,本⼈创新少,从⽹上收集了资料,稍微改写,满⾜了客户的需求。
在应⽤到程序之前,先做了个⼩测试,测试通过,⼩⾼兴,就记录下了这个⼩测试。
⼀.测试效果1.主界⾯2.点击添加附件3.点开始上传⼆.实现1.测试程序轮廓图本⽂的主程序是Main.aspx ,附件上传为Default.aspx,上传的⽂件放在images⽂件夹下⾯2.程序代码1.Main.aspx前台程序View Code<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Main.aspx.cs" Inherits="Main" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head runat="server"><title></title><script language="javascript" type="text/javascript">function addFile(ret) {var fileNameAndRemark=ret.toString().split("|");var fileName=fileNameAndRemark[1].toString().split("*");var Remark=fileNameAndRemark[0].toString().split("*");for(var i=0;i<fileName.length;i++){var div = document.createElement("div");var a = document.createElement("input");a.setAttribute("type", "text");a.setAttribute("size", "30");a.setAttribute("name", "filename");a.setAttribute("value", Remark[i]);a.setAttribute("readonly", "true");div.appendChild(a);var b = document.createElement("label");b.innerText = "---";div.appendChild(b);var c = document.createElement("input");c.setAttribute("type", "text");c.setAttribute("size", "30");c.setAttribute("name", "remark");c.setAttribute("value", fileName[i]);c.setAttribute("readonly", "true");div.appendChild(c);var d = document.createElement("input");d.setAttribute("type", "button")d.setAttribute("onclick", "deteFile(this)");d.setAttribute("value", "移除")div.appendChild(d);document.getElementById("container").appendChild(div);}}function deteFile(o) {while (o.tagName != "DIV") o = o.parentNode;o.parentNode.removeChild(o);}// <!CDATA[function Button1_onclick() {var returnval = window.showModalDialog("Default.aspx", "", "dialogWidth=750px, dialogHeight=500px, , status=no,toolbar=no,menubar=no,scrollbars=yes,resizable=yes");addFile(returnval);}// ]]></script>.</head><body><form id="form1" runat="server"><div><input id="Button1" type="button" value="添加附件" onclick="return Button1_onclick()" /></div><div id="container"></div><div><asp:Button ID="btnInStorage" runat="server" OnClientClick="validate()" onclick="btnInStorage_Click"Text="⼊库 " /></div></form></body></html>2. Main的后台程序View Codeusing System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class Main : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void btnInStorage_Click(object sender, EventArgs e){var FileNames=Request.Form["filename"];var Remarks = Request.Form["remark"];}}3.Default的前台程序View Code<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head runat="server"><title></title><base target="_self" /><script language="javascript" type="text/javascript">function addFile() {var div = document.createElement("div");var g = document.createElement("label");g.innerText = "备注:";div.appendChild(g);var e = document.createElement("input");e.setAttribute("type", "text");e.setAttribute("size", "30");e.setAttribute("name", "remark");e.setAttribute("runat", "server");div.appendChild(e);var f = document.createElement("input");f.setAttribute("type", "file")f.setAttribute("name", "File")f.setAttribute("runat", "server");f.setAttribute("size", "50")div.appendChild(f)var d = document.createElement("input");d.setAttribute("type", "button")d.setAttribute("onclick", "deteFile(this)");d.setAttribute("value", "移除")div.appendChild(d);document.getElementById("_container").appendChild(div);}function deteFile(o) {while (o.tagName != "DIV") o = o.parentNode;o.parentNode.removeChild(o);}function Save() {var filenames = document.getElementById("HFFileNames").value;var Remarks = document.getElementById("HFRemarks").value;window.returnValue = Remarks + "|" +filenames;window.close();}</script></head><body><form id="form1" runat="server" ><h3>多⽂件上传</h3><div id="_container"><label>备注:</label><input type="text" id="remark" runat="server" size="30" /> <input id="File1" type="file" size="50" name="File" runat="server"/></div><div><input type="button" value="添加⽂件" onclick="addFile()" /></div><div style="padding:10px 0"><asp:Button runat="server" Text="开始上传" ID="UploadButton"onclick="UploadButton_Click"></asp:Button></div><input type="hidden" runat="server" id="HFFileNames" /><input type="hidden" runat="server" id="HFRemarks" /></form></body></html>4.Default的后台程序View Codeusing System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void UploadButton_Click(object sender, EventArgs e){String[] Remarks= Request.Form["remark"].Split(',');HttpFileCollection files = HttpContext.Current.Request.Files;try{for (int iFile = 0; iFile < files.Count; iFile++){///'检查⽂件扩展名字HttpPostedFile postedFile = files[iFile];string fileName;fileName = System.IO.Path.GetFileName(postedFile.FileName);if (fileName != ""){HFFileNames.Value =HFFileNames.Value+fileName+"*";HFRemarks.Value = HFRemarks.Value + Remarks[iFile] + "*";postedFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath("images/") + fileName);}}if (HFFileNames.Value.Length > 0){HFFileNames.Value = HFFileNames.Value.Substring(0, HFFileNames.Value.Length - 1);}if (HFRemarks.Value.Length > 0){HFRemarks.Value = HFRemarks.Value.Substring(0, HFRemarks.Value.Length - 1);}AssetTool.JavaScriptTool.AlertMsgAndExeAFunction(this, "上传成功!", "Save()");}catch (System.Exception Ex){AssetTool.JavaScriptTool.AlertMsg(this, Ex.Message);}}}5.关于上传后附件的备注和附件名字问题附件名字列表:var FileNames=Request.Form["filename"];备注列表:var Remarks = Request.Form["remark"];备注:本⽂只是多附件上传的其中⼀种实现⽅法,只是关注功能的实现,并⽆特效,如需特效请⾃⾏添加。
用JSP实现文件上传功能
用JSP实现文件上传功能JSP(JavaServer Pages)是一种用于在服务器上生成动态网页的Java技术。
通过使用JSP,可以实现文件上传功能,使用户能够将文件上传到服务器。
一、前端页面设计:1.创建一个HTML表单,用于用户选择要上传的文件。
2. 指定表单的enctype属性为“multipart/form-data”,以支持文件上传。
3.添加一个提交按钮,用于触发文件上传的动作。
二、后端代码实现:1.在JSP页面上添加以下代码,用于接收和处理文件上传的请求:```jsp<%String uploadPath = "指定文件上传的目标路径"; // 指定文件上传的目标路径,例如:"/uploads/"DiskFileItemFactory factory = new DiskFileItemFactory(;ServletFileUpload upload = new ServletFileUpload(factory);tryList<FileItem> items = upload.parseRequest(request);for (FileItem item : items)if (!item.isFormField() { // 判断是否为上传文件String fileName = new File(item.getName().getName(;String filePath = uploadPath + File.separator + fileName;File storeFile = new File(filePath);item.write(storeFile); // 保存文件到服务器out.println("文件上传成功!");}}} catch (Exception e)out.println("文件上传失败!");e.printStackTrace(;%>```2. 创建一个文件夹用于存储上传的文件,例如在项目根目录下创建一个名为"uploads"的文件夹。
jsp实现文件上传和下载
1 JSP文件上传简单实例1、index.html代码:<html><head><title>上传图片</title></head><body><form action="do_upload.jsp" method="post" enctype="multipart/form-data"><input type="file" name="Photo"><input type="submit" value="上传"></form></body></html>2、使用到的函数和类说明File类文件和目录路径名的抽象表示形式,File(parent,child)方法根据parent 抽象路径名和child 路径名字符串创建一个新File实例FileOutputStream文件输出流,InputStream输入流,将输入数据看成一根管道,可以形象的将输入流比喻成管道的入口,而输出流比喻成管道的出口。
read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个字节数组中。
read() 从此输入流中读取一个数据字节。
write(int b) 将指定字节写入此文件输出流,write(byte[] b, int off, int len) 将指定字节数组中从偏移量off 开始的len 个字节写入此文件输出流。
write(byte[] b) 将 b.length 个字节从指定字节数组写入此文件输出流中Random.readLine()逐行读入,Random.seek(int pos)设置到此文件开头测量到的文件指针偏移量,该位置发生下一个读取和写入操作,Random.getFilePointer()返回此文件当前偏移量,Random.readByte()此方法从该文件的当前文件指针开始读取第一个字节。
手把手教Jsp上传文件
手把手教Jsp上传文件(FileUpload+Servlet)所遇到的问题问题一:String fileName = fis.getName().substring(fis.getName().lastIndexOf(""""));//获得上传文件的文件名中""""应未“\\”,lastIndexOf()返回 String 对象中子字符串最后出现的位置。
stIndexOf(substring[, startindex])参数strObj必选项。
String 对象或文字。
substring必选项。
要在 String 对象内查找的子字符串。
startindex可选项。
该整数值指出在 String 对象内进行查找的开始索引位置。
假如省略,则查找从字符串的末尾开始。
说明lastIndexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置。
假如没有找到子字符串,则返回 -1。
假如 startindex 是负数,则 startindex 被当作零。
假如它比最大字符位置索引还大,则它被当作最大的可能索引。
从右向左执行查找。
否则,该方法和 indexOf 相同。
下面的示例说明了 lastIndexOf 方法的用法:string filepath = "ALow\\K-1s\\2006\\arex1.txt";int i_s = stIndexOf("\\");//最后一个\\前面有14个字符,所以i_s=14string s = filepath.Substring(stIndexOf("\\") + 1);//从第15个字符开始,不包括第15个,取剩下的所有字符此处""""(“\\”)是指截取\及\后的字符,主要确定要传入的文件名,例\ ceshi1.bmp\为转义符\\转义结果为\同理String tmpPath = "f:""tmpdir";String savePath = "f:""updir";为String tmpPath = "f:\\tmpdir";//初始化上传文件的临时存放目录String savePath = "f:\\updir";//初始化上传文件后的保存目录问题二:页面的调用,此模式是先在tomcat中显示页面,再在页面内调用Servlet因此要保证路径正确我的项目名是upload我的jsp名为upload.jsp因此输入的路径为入http://localhost:8080/upload/upload.jsp问题三:页面action的写入upload.jsp sp中<form name="upform" action="UploadServlet" method="POST" enctype="multipart/form-data">问题四:Servlet的的配置Web.xml中<servlet><servlet-name>UploadServlet</servlet-name><servlet-class>UploadServlet</servlet-class></servlet><servlet-mapping><servlet-name>UploadServlet</servlet-name><url-pattern>/UploadServlet</url-pattern>问题五:处理方法为了安全性使用的是dopost方法问题六:Servlet的路径因为我的Web.xml<url-pattern>/UploadServlet</url-pattern>所以我若直接调用Servlet时路径为http://localhost:8080/upload/UploadServlet。
JavaScript实现form表单的多文件上传
JavaScript实现form表单的多⽂件上传form表单的多⽂件上传,具体内容如下formData对象可以使⽤⼀系列的键值对来模拟⼀个完整的表单,然后使⽤Ajax来发送这个表单使⽤<form>表单初始化FormData对象的⽅式上传⽂件<!--⽂件上传--><form id="uploadForm" enctype="multipart/form-data"><div class="row" style="margin-top: 20px;"><div class="form-group col-md-12" id="file"><input type="hidden" name="_csrf-application"value="<?= $csrf ?>"><div class="form-group field-uploadform-excelfiles" style="margin-left: 30px;"><label class="control-label btn btn-primary"for="uploadform-excelfiles">选择⽂件</label><input type="file" id="uploadform-excelfiles" name="UploadForm[excelFiles][]"multiple class="attachment-upload" accept=".xlsx"><input type="button" id="fileUpload" value="上传⽂件" class="btn btn-success" style="margin-left: 15px;"><div class="help-block"></div><div id="fileName"></div></div></div></div><table role="presentation" class="table"><tbody id="files"></tbody></table></form>注意:1. 使⽤formData对象进⾏表单上传必须要为form添加enctype="multipart/form-data"属性2. 使⽤formData对象进⾏表单上传必须要对其开始填⼊的值按照name属性放⼊该对象中,不能开始使⽤action上传,后⾯使⽤formData进⾏上传,这样会导致上传数据出现错误获取change事件改变的⽂件var fileList;var allFile = [];//FormData对象初始化var form = document.getElementById("upload-form");var formData = new FormData(form);$("#uploadform-excelfiles").on('change', function (e) {//获取表单数据并传⼊formData中var norm = $("#norm").val();var major = $("#major").val();var type = $("#type").val();formData.set("norm",norm);formData.set("major",major);formData.set("type",type);var fileError = 0;fileList = e.currentTarget.files;$.each(fileList, function (index, item) {var fileName = ;var fileEnd = fileName.substring(fileName.indexOf("."));//上传⽂件格式判断if (fileEnd == ".xlsx") {allFile.push(item);$('#files').append( '<tr style="padding-top: 7px;">' +'<td>'+fileName+'</td>' +'<td>'+(item.size / 1024).toFixed(2)+'K</td>' +'<td><input type="button" class="btn btn-danger delete" value="删除"></td>' +'</tr>');//追加⽂件formData.append('UploadForm[excelFiles][]',item);} else {fileError++;}});if (fileError > 0) {alert("只能上传 “.xlsx” 格式的⽂件!");document.getElementById("upload-form").reset();return;}var fileCount = $('#files').find('tr').length;$('#fileName').html('共上传 ' + fileCount + ' 个⽂件');});删除按钮事件$('#files').on('click','.delete',function (e) {var saveFile = [];var norm = $("#norm").val();var major = $("#major").val();var type = $("#type").val();var deleteName = e.target.parentNode.previousElementSibling.previousElementSibling.textContent;var deleteIndex;//将不删除的放⼊数组中$.each(allFile,function (index, item) {if( == deleteName){deleteIndex = index;}else {saveFile.push(item);}});allFile.splice(deleteIndex,1);//表单数据重置formData.set("norm",norm);formData.set("major",major);formData.set("type",type);formData.delete('UploadForm[excelFiles][]');//将不删除的数组追加的formData中$.each(saveFile,function (index, item) {formData.append('UploadForm[excelFiles][]',item);});e.target.parentNode.parentNode.remove();var fileCount = $('#files').find('tr').length;$('#fileName').html('共上传 ' + fileCount + ' 个⽂件');});⽂件上传事件$("#fileUpload").on('click',function () {var len = formData.getAll('UploadForm[excelFiles][]').length;$("#overlay").show();if(len > 1){var deleteBtn = $(".delete");//通过ajax进⾏上传$.ajax({url: '/finalize/upload',type: 'POST',cache: false,data: formData,processData: false,contentType: false}).done(function(res) {if(res.code == 'ok'){//进度条设置var value = 0;var timer2 = setInterval(function () {value ++;$("#progress").css('width', value + "%");if (value == 120) {clearInterval(timer2);$("#overlay").hide();alert("⽂件上传成功!");}}, 50);//删除对应按钮$("#fileUpload").css("display","none");$.each(deleteBtn,function (index, item) {$(item).css("display","none");});$('#files').append('<tr><td><td><td><a type="button" class="btn btn-success pull-right" id="fileDown" href="/finalize/get-file?id=' + res.data.id + '" >⽂件下载</a></td></tr>') }}).fail(function(res) {alert("⽂件上传失败:" + res.msg);});}else {alert("请选择需要上传的⽂件!");}});更多精彩内容请参考专题,和进⾏学习。
javascript实现动态多附件上传方法
javascript实现动态多附件上传方法方式一:事先写好多个input.在点击时才显示。
也就是说上传的最大个数是写死了的。
html<p><a href='#'> 添加附件 </a><div id='more1' style='display:none'><input type="file" name="attach1" size="50"javascript:viewnone(more2)></span></div><div id='more2' style='display:none'><input type="file" name="attach2" size="50"'></div></p>js <SCRIPT language="javascript">function viewnone(e){e.style.display=(e.style.display=="none")?"":"none";}</script>方式二:这种方式的动态多文件上传是实现了的,很简单的,不说废话看codehtml<input type="button" name="button" value="添加附件" onclick="addInput()"><input type="button" name="button" value="删除附件" onclick="deleteInput()"><span id="upload"></span>js<script type="text/javascript">var attachname = "attach";var i=1;function addInput(){if(i>0){var attach = attachname + i ;if(createInput(attach))i=i+1;}}function deleteInput(){if(i>1){i=i-1;if(!removeInput())i=i+1;}}function createInput(nm){var aElement=document.createElement("input");=nm;aElement.id=nm;aElement.type="file";aElement.size="50";//aElement.value="thanks";//aElement.onclick=Function("asdf()");if(document.getElementById("upload").appendChild(aEleme nt) == null)return false;return true;}function removeInput(nm){var aElement = document.getElementById("upload");if(aElement.removeChild(stChild) == null)return false;return true;}</script>方式三:动态多文件上传,只是在oFileInput.click();这个地方,这样做就不能上传这个文件了,因为发现它在上传之时就把这个input 中的文件置空了。
Jsp页面实现文件上传下载
Jsp页面实现文件上传下载第1 页jsp页面实现文件上传代码开发的过程见用TOMCAT作简单的jsp web开发名称:jsp页面上传类作者:SinNeRMail:vogoals[at]特点:1可以多文件上传;2返回上传后的文件名;3form表单中的其他参数也可以得到。
先贴上传类,JspFileUploadpackage com.vogoal.util;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Hashtable;import javax.servlet.ServletInputStream;import javax.servlet.http.HttpServletRequest;/** vogoalAPI 1.0*************************** by *mail:********************//*** JSP上传文件类** @author SinNeR* @version 1.0*/public class JspFileUpload {/** request对象*/private HttpServletRequest request = null;/** 上传文件的路径*/private String uploadPath = null;/** 每次读取得字节的大小*/private static int BUFSIZE = 1024 * 8;/** 存储参数的Hashtable */private Hashtable paramHt = new Hasptable();/** 存储上传的文件的文件名的ArrayList */private ArrayList updFileArr = new ArrayList();/*** 设定request对象。
JSP实现文件上传功能
JSP实现⽂件上传功能本⽂实例为⼤家分享了JSP实现⽂件上传功能的具体代码,供⼤家参考,具体内容如下⼀、准备部分需要fileupload.jar与io.jar包共同完成。
构建完成路径后可继续。
⼆、页⾯部分<form action="UploadServlet" method="post" enctype="multipart/form-data">学号:<input type="text" name="sno"/><br/>姓名:<input type="text" name="sname"/><br/>上传照⽚:<input type="file" name="spicture"/><br/><input type="submit" value="注册"/></form>注意:1.⽂件上传必须要使⽤post,以避免⽤get⽅法时传输总量超过搜索框所能承载最⼤字符数。
2.必须加⼊enctype="multipart.form-data"字段3.⽂件处需⽤“file”三、Servlet部分package webtest;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 mons.fileupload.FileItem;import mons.fileupload.FileItemFactory;import mons.fileupload.FileUploadBase;import mons.fileupload.FileUploadException;import mons.fileupload.disk.DiskFileItemFactory;import mons.fileupload.servlet.ServletFileUpload;/*** Servlet implementation class UploadServlet*/@WebServlet("/UploadServlet")public class UploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");// 请求编码处理,传输时response.setCharacterEncoding("utf-8");// 响应编码处理,传输时response.setContentType("utf-8");// 响应编码处理,显⽰时boolean isMultipart = ServletFileUpload.isMultipartContent(request);// 判断是否有entype="multipart/form-data"部分if (isMultipart) {try {FileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);//设置上传时的内存缓冲区⼤⼩,超出时写⼊临时⽂件 10kb((DiskFileItemFactory) factory).setSizeThreshold(10240);//单位byte//设置临时⽂件⽬录,防⽌系统空间不⾜((DiskFileItemFactory) factory).setRepository(new File(request.getSession().getServletContext().getRealPath("Uploadtemp")));//动态获取Uploadtemp⽂件夹位于该项⽬中的位置 //控制上传单个⽂件的最⼤值 20kbupload.setSizeMax(20480);//单位byteList<FileItem> items = upload.parseRequest(request);// 解析form中的所有请求字段,并保存在item中Iterator<FileItem> iter = items.iterator();while (iter.hasNext()) {// 解析时⽆顺序,因此需根据名字查找FileItem item = iter.next();if (item.isFormField()) {//⾮⽂件数据String itemName = item.getFieldName();//获取⾮⽂件的范围数据名if (itemName.equals("sno")) {int sno = -1;sno = Integer.parseInt(item.getString("utf-8"));}else if (itemName.equals("sname")) {String sname = null;sname = item.getString("utf-8");}else {System.out.println("其他字段...");}} else {//⽂件上传String fileName = item.getName();//获取⽂件范围数据。
js+jsp+servlet实现一键上传文件夹中的所有文件
JS+JSP+SERVLET实现一键上传文件夹下面的所有文件到数据库中一、页面的Js代码:<script type="text/javascript">function fileupload(filepath){if(filepath!=""){sendFileToServer(filepath);}else{alert("请选择要上传的文件!");}}function callback() {if (xmlhttp.readyState == 4) {var responseText = xmlhttp.responseText;}}function sendByteStreamToServer(stream,url){if (window.XMLHttpRequest) {xmlhttp = new XMLHttpRequest();if (xmlhttp.overrideMimeType) {xmlhttp.overrideMimeType("text/xml")}} else if (window.ActiveXObject) {var activexName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];for (var i = 0; i < activexName.length; i++) {try {xmlhttp = new ActiveXObject(activexName[i]);break;} catch(e) {e.print()}}}xmlhttp.onreadystatechange = callback;xmlhttp.open("post", url, false);boundary="abcd"xmlhttp.setRequestHeader("Content-Type", "multipart/form-data,boundary="+boundary);xmlhttp.setRequestHeader("Content-Length", stream.Size);//alert(stream.size);xmlhttp.send(stream);}function sendFileToServer(filePath){var filepath=encodeURI(encodeURI(filePath));var stream =new ActiveXObject("ADODB.Stream");stream.Type=1;stream.Open();stream.Position = 0;//指定或返加对像内数据的当前指针。
JSP实现快速上传文件的方法
JSP实现快速上传⽂件的⽅法本⽂实例讲述了JSP实现快速上传⽂件的⽅法。
分享给⼤家供⼤家参考。
具体如下:这⾥演⽰JSP不使⽤第三⽅库,实现快速上传⽂件的功能1. FileUpload.java:p ackage FileUpload;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import javax.servlet.ServletInputStream;/****//*** @author Qch**/public class FileUpload{ServletInputStream in=null;String fpath="C://";public FileUpload(){fpath="C://";in=null;}public void setInputStream(ServletInputStream in){this.in=in;}public void setFpath(String p){this.fpath=p;}public String getFpath(){return fpath;}public String getParameter(){String r=null;try{r=getParameter(in);}catch (Exception e){e.printStackTrace();}return r;}public long getFileUpload(){long r=-1;try{r=getFileUpload(in,fpath);}catch (Exception e){e.printStackTrace();}return r;}public String getParameter(ServletInputStream in)// 只能按顺序提取throws Exception{int l = 0;byte[] b = new byte[1024];l = in.readLine(b, 0, b.length);// 依次是读取属性的开始符、名称、属性值的类型、属性的值String si = new String(b);if (si.startsWith("----------------------------")){// 表⽰是从开始符开始读,否则应为刚读取⽂件后的⼀个属性,此时应少读⼀次l = in.readLine(b, 0, b.length);}l = in.readLine(b, 0, b.length);l = in.readLine(b, 0, b.length);String value = new String(b, 0, l);return value;}public long getFileUpload(ServletInputStream in, String fpath)// 需要提供输⼊流和存储路径 throws Exception{// out.println("⽂件信息:<br>");long begin = System.currentTimeMillis();// 传送时间计时开始int l = 0;byte[] b = new byte[1024];l = in.readLine(b, 0, b.length);String sign = new String(b, 0, l);// eg.-----------------------------7d9dd29630a34l = in.readLine(b, 0, b.length);String info = new String(b, 0, l);// eg.Content-Disposition:form-data;// name="file";l = in.readLine(b, 0, b.length);// String type=new// String(b,0,l);//eg.Content-Type:application/octet-stream(程序⽂件)l = in.readLine(b, 0, b.length);// String nulll=new String(b,0,l);//此值应为空int nIndex = info.toLowerCase().indexOf("filename=\"");int nLastIndex = info.toLowerCase().indexOf("\"", nIndex + 10);String filepath = info.substring(nIndex + 10, nLastIndex);int na = stIndexOf("\\");String filename = filepath.substring(na + 1);// out.println("⽂件绝对路径:"+filepath+"<br>");// out.println("⽂件名:"+filename+"<br><br>");String path=fpath + filename;File fi = new File(path);// 建⽴⽬标⽂件if (!fi.exists()&&!fi.createNewFile())return -2;BufferedOutputStream f = new BufferedOutputStream(new FileOutputStream(fi));while ((l = in.readLine(b, 0, b.length)) > 0){if (l == sign.length()){String sign1 = new String(b, 0, sign.length());// out.println(sign1+"<br>");if (sign1.startsWith(sign))// ⽐对是否⽂件已传完break;}f.write(b, 0, l);f.flush();}f.flush();f.close();long end = System.currentTimeMillis();// 传送时间计时结束// out.println("上传⽂件⽤时:"+(end-begin)+"毫秒<br>");return end - begin;}}2. submitFile.jsp:<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><%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>My JSP 'submitFile.jsp' starting page</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" type="text/css" href="styles.css">--><script language="javascript">function check(){if (.value==""){alert("姓名不能为空!!");.focus();return false;}if (document.form2.file.value==""){alert("⽂件不能为空!!");return false;}return true;}</script></head><body><br><form method="post" name="form2" enctype="MULTIPART/FORM-DATA"action="AnswerFile.jsp"><br><p align="center"> <br></p><table width="530" border="1" bgcolor="#c0c0c0" align="center"height="91"><tbody><tr><td valign="top" align="right">姓名<br></td><td valign="top"><input type="text" name="name"></td></tr><tr><td align="right"> ⽂件</td><td align="left"> <input type="file" name="file"></td></tr><tr><td valign="top" align="right">⽂件类型<br></td><td valign="top" align="left"><select size="1" name="leixing"><option selected value="作业">作业</option><option value="课程设计">课程设计</option><option value="论⽂">论⽂</option></select></td></tr><tr><td align="right"><input type="Submit" value="上传" name="button2" onclick="return(check());"> </td><td align="left"> <input type="reset" value="重置" name="button3"></td></tr></tbody></table><p> <br><br> </p></form></body></html>3. AnswerFile.jsp:<%@ page language="java" import="java.util.*,java.io.*"pageEncoding="GB18030"%><%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>My JSP 'AnswerFile.jsp' starting page</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" type="text/css" href="styles.css">--></head><body><jsp:useBean id="upload" scope="session" class="FileUpload.FileUpload"/> <jsp:setProperty name="upload" value="C://" property="fpath"/><%ServletInputStream in = request.getInputStream();upload.setInputStream(in);String nam = upload.getParameter();out.println("姓名:" + nam + "<br><br>");long time = upload.getFileUpload();out.println("⽂件上传完毕,总共耗时:" + time + "毫秒<br>");String leixing = upload.getParameter();out.println("⽂件类型:" + leixing + "<br>");in.close();%><br><div align="right"><a href="index.jsp">回到⾸页</a></div></body></html>希望本⽂所述对⼤家的JSP程序设计有所帮助。
JSP上传文件
UploadExample.jsp<%@ page contentType="text/html;charset=gb2312"%> <html><title><%= application.getServerInfo() %></title><body>上传文件程序应用示例<form action="doUpload.jsp" method="post"enctype="multipart/form-data"><%-- 类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传。
--%>请选择要上传的文件<input type="file" name="upfile" size="50"><input type="submit" value="提交"></form></body></html>doUpload.jsp<%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.io.*"%><%@ page import="java.util.*"%><%@ page import="javax.servlet.*"%><%@ page import="javax.servlet.http.*"%><html><head><title>upFile</title></head><body bgcolor="#ffffff"><%//定义上载文件的最大字节int MAX_SIZE = 102400 * 102400;// 创建根路径的保存变量String rootPath;//声明文件读入类DataInputStream in = null;FileOutputStream fileOut = null;//取得客户端的网络地址String remoteAddr = request.getRemoteAddr();//获得服务器的名字String serverName = request.getServerName();//取得互联网程序的绝对地址String realPath = request.getRealPath(serverName);realPath =realPath.substring(0,stIndexOf("\\"));//创建文件的保存目录rootPath = realPath + "\\upload\\";//取得客户端上传的数据类型String contentType = request.getContentType();try{if(contentType.indexOf("multipart/form-data") >= 0){ //读入上传的数据in = new DataInputStream(request.getInputStream()); int formDataLength = request.getContentLength();if(formDataLength > MAX_SIZE){out.println("<P>上传的文件字节数不可以超过" + MAX_SIZE + "</p>");return;}//保存上传文件的数据byte dataBytes[] = new byte[formDataLength];int byteRead = 0;int totalBytesRead = 0;//上传的数据保存在byte数组while(totalBytesRead < formDataLength){byteRead =in.read(dataBytes,totalBytesRead,formDataLength); totalBytesRead += byteRead;}//根据byte数组创建字符串String file = new String(dataBytes);//out.println(file);//取得上传的数据的文件名String saveFile =file.substring(file.indexOf("filename=\"") + 10); saveFile = saveFile.substring(0,saveFile.indexOf("\n")); saveFile = saveFile.substring(stIndexOf("\\") + 1,saveFile.indexOf("\""));int lastIndex = stIndexOf("=");//取得数据的分隔字符串String boundary = contentType.substring(lastIndex + 1,contentType.length());//创建保存路径的文件名String fileName = rootPath + saveFile;//out.print(fileName);int pos;pos = file.indexOf("filename=\"");pos = file.indexOf("\n",pos) + 1;pos = file.indexOf("\n",pos) + 1;pos = file.indexOf("\n",pos) + 1;int boundaryLocation = file.indexOf(boundary,pos) - 4; //out.println(boundaryLocation);//取得文件数据的开始的位置int startPos = ((file.substring(0,pos)).getBytes()).length; //out.println(startPos);//取得文件数据的结束的位置int endPos =((file.substring(0,boundaryLocation)).getBytes()).length; //out.println(endPos);//检查上载文件是否存在File checkFile = new File(fileName);if(checkFile.exists()){out.println("<p>" + saveFile + "文件已经存在.</p>"); }//检查上载文件的目录是否存在File fileDir = new File(rootPath);if(!fileDir.exists()){fileDir.mkdirs();}//创建文件的写出类fileOut = new FileOutputStream(fileName);//保存文件的数据fileOut.write(dataBytes,startPos,(endPos - startPos)); fileOut.close();out.println(saveFile + "文件成功上载.</p>");}else{String content = request.getContentType();out.println("<p>上传的数据类型不是multipart/form-data</p>");}}catch(Exception ex){throw new ServletException(ex.getMessage());}%></body></html>。
js实现上传文件夹
基于Spring MVC文件上传组件MultipartResolver接口(核心),使用其中的CommonsMultipartResolver(实现了MultipartResolver接口)这个实现类,CommonsMultipartResolver中 的maxUploadSize属性是它继承的抽象父类CommonsFileUploadSupport,这个抽象类其中的一个属性是FileUpload类,而这个类又继承自FileUploadBase这个抽象类,其中它的 private long sizeMax = -1;就是maxUploadSize属性的最终设置地方。-1表示文件上传大小没有限制,但是我们一般都会设置一个限制值,这里设置的是210763776,这个值的单位是字 节,我们将它设置为525336576字节,也就是501M的大小限制。
设置哪些事件可以被重写,JSON格式,如:’overrideEvents’ : ['onUploadProgress']
preventCaching
true
如果为true,则每次上传文件时自动加上一串随机字符串参数,防止URL缓存影响上传结果
progressData
‘percentage’
设置上传进度显示方式,percentage显示上传百分比,speed显示上传速度
width
120
设置文件浏览按钮的宽度。
第二步:
后端修改
由于项目后端使用的Spring Boot,本身也就是使用的Spring MVC文件上传部分,Spring MVC使用的是已经对Servlet文件上传封装了的MultipartResolver接口及其相关实现类和一些相关
的类,具体的可以看Spring MVC文件上传源码部分,认为Spring源码还是需要读的,我们只要在Spring Boot启动类中注入这个Bean,或者自行写一个WebConfig配置类,注入一些Web 相关的Bean即可,这样Spring Boot启动就会加载配置类,也需要自己写拦截器和全局AOP切面,去捕捉文件上传大小超过限制的异常处理等
用JSP实现上传文件的两种方法
用JSP实现上传文件的两种方法以前用cos作文件上传但是对于文件上传后的改名还需要借助其他的工具摘录如下:在用Java开发企业器系统的使用特别是涉及到与办公相关的软件开发的时候文件的上传是客户经常要提到的要求因此有一套很好文件上传的解决办法也能方便大家在这一块的开发首先申明该文章是为了自己记录一备以后开发需要的时候不用手忙脚乱哈哈现在在国内用的非常多的一般是两种方法解决来解决文件上传cos jar + uploadbean jar + filemover jar 这个是用的非常普遍的原因是因为他操作方便是我们不必再去关注那些文件的输入和输出流使我们从底层的流中解脱出来UploadFile UploadBean MultipartFormDataRequest<%@ page contentType="text/;charset=gb " %> <head> <title>fbysss UploadBean 示例</title> <! meta equiv="Content Type" content="text/; charset=iso " > <! meta equiv="Content Type" content="text/; charset=gb " > </head> <FORM name=form METHOD="POST" ACTION="sssupload jsp" ENCTYPE="multipart/form data"> <input name=title type= "text" value="中文字"> <td >附件</td> <td > <input name=attach type=FILE id="attach" size=" " > </td> <input name=ok type= "submit" value="提交"> </form>读取表单页面sssgetdata jsp<!//======================================== ================================== //文件UploadBean上传实例//功能解决中文乱码完成文件上传并提供上传改名解决方案//作者fbysss //msn:jameslastchina@hotmail//======================================== ================================== > <%@ page contentType="text/;charset=GBK" %> <%@ page language="java" import=" jsp *** art upload *"%> <%@ page import="java text SimpleDateFormat"%> <%@ page import="java io File"%> <%@ page import="java util *"%> <%@ page import="javazoom upload *"%> <%@ page import="uploadutilities FileMover"%> <head> <meta equiv="Content Type" content="text/; charset=gb "> </head> <%request setCharacterEncoding("GBK");//设置编码格式就不用一个个转码了 FileMover fileMover = new FileMover();//你也可以使用自带的实例中jsp:useBean的形式UploadBean upBean = new UploadBean(); MultipartFormDataRequest mrequest = null; Hashtable files = null;if (MultipartFormDataRequest isMultipartFormData(request)) { mrequest = new MultipartFormDataRequest(request null * * MultipartFormDataRequest COSPARSER "GBK");//注意这里也要设置编码参数String sTt = mrequest getParameter("title"); out println("<br>Title 是 "+sTt +"<br>"); String sTt = new String(sTt getBytes("ISO ") "GBK"); out println("<br>Title 是 "+sTt +"<br>"); //这里用来测试title参数是否正确调试的时候加一句if (true)return;即可 files = mrequest getFiles(); }//获取修改前的文件名String sOldFileName =mrequest getParameter("oldfilename"); out println("sOldFileName:"+sOldFileName); String sWebRootPath = request getRealPath("/");//得到你的web应用的根String sPath=sWebRootPath+"attach"; int iFileCount = ; String sServerFileName=""; String sLocalFileName = ""; //文件获取if ( (files != null) || (!files isEmpty()) ) {iFileCount = files size(); UploadFile file = (UploadFile) filesget("attach"); sLocalFileName=file getFileName(); out println("sLocalFileName:"+sLocalFileName); int ii= sLocalFileName indexOf(" "); //取文件名的后缀String sExt = sLocalFileName substring(ii sLocalFileName length()); //得到不重复的文件名java util Date dt = new java util Date(System currentTimeMillis()); SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS"); sServerFileName= fmt format(dt); sServerFileName =sServerFileName + sExt; //如果不存在该目录则新建一个 File dir =new File(sPath); if (!dir exists()){ dir mkdirs(); } upBean setFolderstore(sPath);//设置要上传的目录upBean addUploadListener(fileMover);//增加filMover监听fileMover setNewfilename(sServerFileName);//设置服务器上的文件名upBean store(mrequest "attach");//上传out println("file path is "+sPath+"/"+sServerFileName); }%>Demo注意事项 cos jar uploadbean jar filemover jar这几个包必须有必备下载地址UploadBean FileMover 参考下载地址ChinesUpload例子参考了fbysss的一篇文章 apache struts upload FormFile Struts 的 apache struts upload FormFile类很方便不用自己写也不用写一个jsp调用jsp *** artupload就可以搞定选择上传文件页面 selfile jsp<%@ taglib uri="/WEB INF/struts tld" prefix=""%> <:> <:form action="/uploadsAction do" enctype="multipart/form data"> <:file property="theFile"/> <:submit/> </:form> </:> UpLoadAction java import java io *; import javax servlet *; import apache struts action *; import apache struts upload FormFile;/** *//** * <p>Title:UpLoadAction</p> * <p>Description: QRRSMMS </p> * <p>Copyright: Copyright (c) jiahansoft</p> *<p>Company: jiahansoft</p> * @author wanghw * @version */ public class UpLoadAction extends Action { public ActionForward execute(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response) throws Exception { if (form instanceof uploadsForm) {//如果form 是uploadsForm String encoding = request getCharacterEncoding(); if ((encoding != null) && (encoding equalsIgnoreCase("utf "))) { response setContentType("text/; charset=gb ");//如果没有指定编码编码格式为gb } UpLoadForm theForm = (UpLoadForm ) form; FormFile file = theForm getTheFile();//取得上传的文件try { InputStream stream = file getInputStream();//把文件读入String filePath = request getRealPath("/");//取当前系统路径ByteArrayOutputStream baos = new ByteArrayOutputStream(); OutputStream bos = new FileOutputStream(filePath + "/" + file getFileName());//建立一个上传文件的输出流//System out println(filePath+"/"+file getFileName()); int bytesRead = ; byte[] buffer = new byte[ ]; while ( (bytesRead = stream read(buffer )) != ) { bos write(buffer bytesRead);//将文件写入服务器} bos close(); stream close(); }catch(Exception e){ System err print(e); } //request setAttribute("dat" file getFileName()); return mapping findForward("display"); } return null; } }UpLoadForm javaimport javax servlet import apache struts action *; import apache struts upload *;/** *//** * <p>Title:UpLoadForm</p> * <p>Description: QRRSMMS </p> * <p>Copyright: Copyright (c) jiahansoft</p> * <p>Company: jiahansoft</p> * @author wanghw * @version */public class UpLoadForm extends ActionForm { public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED = " apache struts webapp upload MaxLengthExceeded"; protected FormFile theFile; public FormFile getTheFile() { return theFile; } public void setTheFile(FormFile theFile) { this theFile = theFile; } public ActionErrors validate(ActionMapping mapping HttpServletRequest request) { ActionErrors errors = null; //has the maximum length been exceeded? Boolean maxLengthExceeded = (Boolean) request getAttribute(MultipartRequestHandlerATTRIBUTE_MAX_LENGTH_EXCEEDED); if ((maxLengthExceeded != null) && (maxLengthExceeded booleanValue())) { errors = new ActionErrors(); errors add(ERROR_PROPERTY_MAX_LENGTH_EXCEEDED new ActionError("maxLengthExceeded")); } return errors;} } //这是相对应的form 还有其他属性可以设置具体可以参考struts的上传例子struts config xmllishixinzhi/Article/program/Java/JSP/201311/20075。
用JSP/Servlet实现文件上传
[ 文献标识码 ]A [ 文章编号]17— 55 ( 0) 302—4 6383 2 7 0-07 0 0
文件上传在很多网站应用中是必不可少的,在 电子商务中上传商品图片 ,在音乐网站中上传流行 歌 曲……一个高效率的文件上传功能尤为重要 。笔 者 主要 介 绍 用 JP方 式 和 Srlt 式 实 现 的 两个 S eve 方 代码简短又高效率的文件上传功能 。在此基础上 , 可 以对文 件上传 功 能进行 进一 步 的完 善 ,如 限制上
1c” ; et
方法 生成 Srlt p tt a ev I uSr m类 的对象 ,即 I 中 的 en e / 0
输人流对象。sr e nu t a ev t pt r m类提供了 pbi i lI s e ul t cn
ra Ln (ye[ b ito , t e ) trw aa o ed ie b t 】 , n fi n ho s v . . nl j i
维普资讯
第 1 7卷
第3 期
梧 州 学 院 学 报
J U N L O WU H U U I E ST O R A F Z O N V R IY
No3 Vo . 7 - 11
20 0 7年 6月
J n2 0 u .0 7
用 JPSrl 实现 文件上传 S /eve t
④
第 一 行 是 “ onay ,表 示 数 据 开 始 ,第 二 budr”
行是对数据 内容的捕述 、 表单 中 fe i 控件 的名称以 l
・
2 ・ 7
维普资讯
2 0 年 第 3期 07
梧
州
学
院
学
报
第 1 7卷
及所 上 传 文件 的路 径 和文 件 名 ,第 三 行 是 文 件 类 型 ,第 四行 为一 空行 。从第 二行 数据 中取 出文件 扩 展 名后 ,可 以进行 上 传文件 类 型的控制 ,如 上传 图 片则 判 断 扩展 名 是 否 为 .f . g等格 式 ,上 传 音 g或J i P 频 文 件则 判 断扩 展 名 是 否为 .p m 3或 .m w a等 格 式 。 需 要注 意的 是 .如果 取 出的文 件路径 和 文件名 值 为
用JSP实现拖拽上传文件和文件夹
作者简介: 李文轩(1975-),男,广东惠州人,工程师,供职于中国人民银行惠州市中心支行,副科长,研究方向:运维管理、网络 技术。 收稿日期: 2019-05-09
51
Research|技术应用
2019年·第7期
栏目编辑:梁丽雯 E-mail:liven_01@
dragleave:当元素离开drop元素时触发。例如,设 置按钮字体颜色恢复黑色。
button.ondragleave=function( ){this.st yle. color="#000";};
d r o p:在目标 元素上释放 拖 拽 元素 时 触 发,在 这 里处理上传操作。
button.ondrop=drop; function drop(evt) { ev t .pr event Def au lt( );//阻 止系统 隐含的处 理 方式 var button=evt.target; //获得用户 选择释放的目标文件夹 ……//开始进行处理 }
四、文ቤተ መጻሕፍቲ ባይዱ夹的处理
以 上 介 绍的是 对 文件 的上传。C h r o m e 浏 览 器 还
支 持文件 夹的上传,其获得 拖 拽 对 象的方 法 是ev t . dataTransfer.items。该items同样是一个集合,其中的每 个元素都要通过调用专用方法才能获得文件或文件夹 项目。
var entry=items[i].webkitGetAsEntry(); 项 目的 类 型 可 通 过 其 属 性 进 行 判 断:对 于 文 件类型,ent r y.isFi le为真;对于文件 夹类型,ent r y. isDirectory为真。 其中,文件类型的entry并非“标准”的文件object, 不能直接使用f ileReader的readAsArrayBuffer(entry) 方法读取,必须定义一个回调函数,通过entr y的f ile 功 能去调用回调函数,在回调函数中才 能 获得“文 件”object。 var files = new Array();//读取到的文件项目, 等待上传 var items = evt.dataTransfer.items; if (items==undefined) Alert("您的浏览器不支 持文件夹上传"); for(var i = 0; i < items.length; i++){ var entry = items[i].webkitGetAsEntry(); if(!entry) break; if(entry.isFile){//如果是文件entry entr y.f i le(getAFi le); } else {//如果是文件夹entry
jspstruts1struts2上传文件
一.在JSP环境中利用Commons-fileupload组件实现文件上传1.页面upload.jsp清单如下:Java代码1.<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>2.3.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.01 Transitional//EN">4.<html>5. <head>6. <title>The FileUpload Demo</title>7. </head>8.9. <body>10. <form action="UploadFile" method="post" enctype="multipart/form-data">11. <p><input type="text" name="fileinfo" value="">文件介绍</p>12. <p><input type="file" name="myfile" value="阅读文件"></p>13. <p><input type="submit" value="上传"></p>14. </form>15. </body>16.</html>注意:在上传表单中,既有一般文本域也有文件上传域2.FileUplaodServlet.java清单如下:Java代码1.package org.chris.fileupload;2.3.import java.io.File;4.import java.io.IOException;5.import java.util.Iterator;6.import java.util.List;7.8.import javax.servlet.ServletException;9.import javax.servlet.http.*;10.11.import org.apachemons.fileupload.FileItem;12.import org.apachemons.fileupload.FileItemFactory;13.import org.apachemons.fileupload.disk.DiskFileItemFactory;14.import org.apachemons.fileupload.servlet.ServletFileUpload;15.16.public class FileUplaodServlet extends HttpServlet {17.18. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {19. doPost(request, response);20. }21.22. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {23.24. request.setCharacterEncoding("UTF-8");25.26. //文件的上传部份27. boolean isMultipart = ServletFileUpload.isMultipartContent(request);28.29. if(isMultipart)30. {31. try {32. FileItemFactory factory = new DiskFileItemFactory();33. ServletFileUpload fileload = new ServletFileUpload(factory);34.35.// 设置最大文件尺寸,那个地址是4MB36. fileload.setSizeMax(4194304);37. List<FileItem> files = fileload.parseRequest(request);38. Iterator<FileItem> iterator = files.iterator();39. while(iterator.hasNext())40. {41. FileItem item = iterator.next();42. if(item.isFormField())43. {44. String name = item.getFieldName();45. String value = item.getString();46. System.out.println("表单域名为: " + name + "值为: " + value);47. }else48. {49. //取得取得文件名,此文件名包括途径50. String filename = item.getName();51. if(filename != null)52. {53. File file = new File(filename);54. //若是此文件存在55. if(file.exists()){56. File filetoserver = new File("d:\\upload\\",file.getName());57. item.write(filetoserver);58. System.out.println("文件 " + filetoserver.getName() + " 上传成功!!");59. }60. }61. }62. }63. } catch (Exception e) {64. System.out.println(e.getStackTrace());65. }66. }67. }68.}3.web.xml清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<web-app version="2.4"3. xmlns="java.sun/xml/ns/j2ee"4. xmlns:xsi="/2001/XMLSchema-instance"5. xsi:schemaLocation="java.sun/xml/ns/j2ee6. java.sun/xml/ns/j2ee/web-app_2_4.xsd">7.8. <servlet>9. <servlet-name>UploadFileServlet</servlet-name>10. <servlet-class>11. org.chris.fileupload.FileUplaodServlet12. </servlet-class>13. </servlet>14.15. <servlet-mapping>16. <servlet-name>UploadFileServlet</servlet-name>17. <url-pattern>/UploadFile</url-pattern>18. </servlet-mapping>19.20. <welcome-file-list>21. <welcome-file>/Index.jsp</welcome-file>22. </welcome-file-list>23.24.</web-app>二.在strut1.2中实现1.上传页面file.jsp 清单如下:Java代码1.<%@ page language="java" pageEncoding="ISO-8859-1"%>2.<%@ taglib uri="/struts/tags-bean" prefix="bean"%>3.<%@ taglib uri="/struts/tags-html" prefix="html"%>4.5.<html>6. <head>7. <title>JSP for FileForm form</title>8. </head>9. <body>10. <html:form action="/file" enctype="multipart/form-data">11. <html:file property="file1"></html:file>12. <html:submit/><html:cancel/>13. </html:form>14. </body>15.</html>2.FileAtion.java的清单如下:Java代码1./*2. * Generated by MyEclipse Struts3. * Template path: templates/java/JavaClass.vtl4. */5.package action;6.7.import java.io.*;8.9.import javax.servlet.http.HttpServletRequest;10.import javax.servlet.http.HttpServletResponse;11.import org.apache.struts.action.Action;12.import org.apache.struts.action.ActionForm;13.import org.apache.struts.action.ActionForward;14.import org.apache.struts.action.ActionMapping;15.import org.apache.struts.upload.FormFile;16.17.import form.FileForm;18.19./**20. * @author Chris21. * Creation date: 6-27-202022. *23. * XDoclet definition:24. * @struts.action path="/file" name="fileForm" input="/file.jsp"25. */26.public class FileAction extends Action {27. /*28. * Generated Methods29. */30.31. /**32. * Method execute33. * @param mapping34. * @param form35. * @param request36. * @param response37. * @return ActionForward38. */39. public ActionForward execute(ActionMapping mapping, ActionForm form,40. HttpServletRequest request, HttpServletResponse response) {41. FileForm fileForm = (FileForm) form;42. FormFile file1=fileForm.getFile1();43. if(file1!=null){44. //上传途径45. String dir=request.getSession(true).getServletContext().getRealPath("/upload");46. OutputStream fos=null;47. try {48. fos=new FileOutputStream(dir+"/"+file1.getFileName());49. fos.write(file1.getFileData(),0,file1.getFileSize());50. fos.flush();51. } catch (Exception e) {52. // TODO Auto-generated catch block53. e.printStackTrace();54. }finally{55. try{56. fos.close();57. }catch(Exception e){}58. }59. }60. //页面跳转61. return mapping.findForward("success");62. }63.}3.FileForm.java的清单如下:Java代码1.package form;2.3.import javax.servlet.http.HttpServletRequest;4.import org.apache.struts.action.ActionErrors;5.import org.apache.struts.action.ActionForm;6.import org.apache.struts.action.ActionMapping;7.import org.apache.struts.upload.FormFile;8.9./**10. * @author Chris11. * Creation date: 6-27-202012. *13. * XDoclet definition:14. * @struts.form name="fileForm"15. */16.public class FileForm extends ActionForm {17. /*18. * Generated Methods19. */20. private FormFile file1;21. /**22. * Method validate23. * @param mapping24. * @param request25. * @return ActionErrors26. */27. public ActionErrors validate(ActionMapping mapping,28. HttpServletRequest request) {29. // TODO Auto-generated method stub30. return null;31. }32.33. /**34. * Method reset35. * @param mapping36. * @param request37. */38. public void reset(ActionMapping mapping, HttpServletRequest request) {39. // TODO Auto-generated method stub40. }41.42. public FormFile getFile1() {43. return file1;44. }45.46. public void setFile1(FormFile file1) {47. this.file1 = file1;48. }49.}4.struts-config.xml的清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "/d tds/struts-config_1_2.dtd">3.4.<struts-config>5. <data-sources />6. <form-beans >7. <form-bean name="fileForm" type="form.FileForm" />8.9. </form-beans>10.11. <global-exceptions />12. <global-forwards />13. <action-mappings >14. <action15. attribute="fileForm"16. input="/file.jsp"17. name="fileForm"18. path="/file"19. type="action.FileAction"20. validate="false">21. <forward name="success" path="/file.jsp"></forward>22. </action>23.24. </action-mappings>25.26. <message-resources parameter="ApplicationResources" />27.</struts-config>5.web.xml代码清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<web-app xmlns="java.sun/xml/ns/j2ee" xmlns:xsi="w/2001/XMLSchema-instance" version="2.4" xsi:schemaLocatio n="java.sun/xml/ns/j2ee java.sun/xml/ns/j2ee/web-app_2_4.xsd">3. <servlet>4. <servlet-name>action</servlet-name>5. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>6. <init-param>7. <param-name>config</param-name>8. <param-value>/WEB-INF/struts-config.xml</param-value>9. </init-param>10. <init-param>11. <param-name>debug</param-name>12. <param-value>3</param-value>13. </init-param>14. <init-param>15. <param-name>detail</param-name>16. <param-value>3</param-value>17. </init-param>18. <load-on-startup>0</load-on-startup>19. </servlet>20. <servlet-mapping>21. <servlet-name>action</servlet-name>22. <url-pattern>*.do</url-pattern>23. </servlet-mapping>24.</web-app>三.在struts2中实现(以图片上传为例)1.FileUpload.jsp代码清单如下:Java代码1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>2.<%@ taglib prefix="s" uri="/struts-tags" %>3.<html>4. <head>5. <title>The FileUplaodDemo In Struts2</title>6. </head>7.8. <body>9. <s:form action="fileUpload.action" method="POST" enctype="multipart/form-data">10. <s:file name="myFile" label="MyFile" ></s:file>11. <s:textfield name="caption" label="Caption"></s:textfield>12. <s:submit label="提交"></s:submit>13. </s:form>14. </body>15.</html>2.ShowUpload.jsp的功能清单如下:Java代码1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>2.<%@ taglib prefix="s" uri="/struts-tags" %>3.<html>4. <head>5. <title>ShowUpload</title>6. </head>7.8. <body>9. <div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" >10. <img src ='UploadImages/<s:property value ="imageFileName"/> '/>11. <br />12. <s:property value ="caption"/>13. </div >14. </body>15.</html>3.FileUploadAction.java的代码清单如下:Java代码1.package com.chris;2.3.import java.io.*;4.import java.util.Date;5.6.import org.apache.struts2.ServletActionContext;7.8.9.import com.opensymphony.xwork2.ActionSupport;10.11.public class FileUploadAction extends ActionSupport{12.13. private static final long serialVersionUID = 572146812454l;14. private static final int BUFFER_SIZE = 16 * 1024 ;15.16. //注意,文件上传时<s:file/>同时与myFile,myFileContentType,myFileFileName绑定17. //因此同时要提供myFileContentType,myFileFileName的set方式18.19. private File myFile; //上传文件20. private String contentType;//上传文件类型21. private String fileName; //上传文件名22. private String imageFileName;23. private String caption;//文件说明,与页面属性绑定24.25. public void setMyFileContentType(String contentType) {26. System.out.println("contentType : " + contentType);27. this .contentType = contentType;28. }29.30. public void setMyFileFileName(String fileName) {31. System.out.println("FileName : " + fileName);32. this .fileName = fileName;33. }34.35. public void setMyFile(File myFile) {36. this .myFile = myFile;37. }38.39. public String getImageFileName() {40. return imageFileName;41. }42.43. public String getCaption() {44. return caption;45. }46.47. public void setCaption(String caption) {48. this .caption = caption;49. }50.51. private static void copy(File src, File dst) {52. try {53. InputStream in = null ;54. OutputStream out = null ;55. try {56. in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);57. out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);58. byte [] buffer = new byte [BUFFER_SIZE];59. while (in.read(buffer) > 0 ) {60. out.write(buffer);61. }62. } finally {63. if ( null != in) {64. in.close();65. }66. if ( null != out) {67. out.close();68. }69. }70. } catch (Exception e) {71. e.printStackTrace();72. }73. }74.75. private static String getExtention(String fileName) {76. int pos = stIndexOf(".");77. return fileName.substring(pos);78. }79.80.@Override81. public String execute() {82. imageFileName = new Date().getTime() + getExtention(fileName);83. File imageFile = new File(ServletActionContext.getServletContext().getRealPath("/UploadImages" ) + "/" + imageFileN ame);84. copy(myFile, imageFile);85. return SUCCESS;86. }87.}注:现在仅为方便实现Action因此继承ActionSupport,并Overrider execute()方式在struts2中任何一个POJO都能够作为Action4.struts.xml清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC3. "-//Apache Software Foundation//DTD Struts Configuration2.0//EN"4. "/dtds/struts-2.0.dtd">5.<struts>6. <package name="example" namespace="/" extends="struts-default">7. <action name="fileUpload" class="com.chris.FileUploadAction">8. <interceptor-ref name="fileUploadStack"/>9. <result>/ShowUpload.jsp</result>10. </action>11. </package>12.</struts>5.web.xml清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<web-app version="2.4"3. xmlns="java.sun/xml/ns/j2ee"4. xmlns:xsi="/2001/XMLSchema-instance"5. xsi:schemaLocation="java.sun/xml/ns/j2ee6. java.sun/xml/ns/j2ee/web-app_2_4.xsd">7. <filter >8. <filter-name > struts-cleanup </filter-name >9. <filter-class >10. org.apache.struts2.dispatcher.ActionContextCleanUp11. </filter-class >12. </filter >13. <filter-mapping >14. <filter-name > struts-cleanup </filter-name >15. <url-pattern > /* </url-pattern >16. </filter-mapping >17.18. <filter>19. <filter-name>struts2</filter-name>20. <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>21. </filter>22. <filter-mapping>23. <filter-name>struts2</filter-name>24. <url-pattern>/*</url-pattern>25. </filter-mapping>26. <welcome-file-list>27. <welcome-file>Index.jsp</welcome-file>28. </welcome-file-list>29.30.</web-app>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JSP 实现多个文件上传的两种方法
JSP实现文件上传的实现方式是这样的:使用ServletRequest类的getInputStream()方法获得一个客户端向服务器发出的数据流,然后处理这个数据流,从中分析得到文件上传中传递到服务器的各个参数和数据,然后将其中的文件数据存储为一个文件或插入到数据库中。
通常JSP页面中不处理文件的上传功能,而是把这些功能放到Servlet 或JavaBean中去实现。
使用Servlet完成文件上传的例子在其他JSP书籍中有所介绍,这里只介绍使用JeanBean是如何完成文件上传的。
JSP中实现文件的上传可以采用两种方式即采用HTTP协议和FTP协议实现,二者在传输的原理上存在很大的差异。
以下将结合源代码对它们的实现做简单介绍,相信读者会从中有所收获。
在JSP中使用JavaBean实现基于Web的文件上传功能一般需要三种文件结合完成。
这三种文件分别是提供界面的HTML页面文件、完成调用实现上传功能的JavaBean的JSP文件和实现JavaBean的Java的类文件。
1.采用HTTP协议实现多个文件的上传
在过去的HTML页面中,表单不能实现文件的上传,这多少限制了一些网页的功能。
RFC1867规范(即HTML中实现基于表单的文件上传)对表单作出了扩展,增加了一个表单元素(input type=file)。
通过使用这个元素,浏览器会自动生成一个输入框和一个按钮,输入框可供用户填写本地的文件名和路径名,按钮可以让浏览器打开一个文件选择框供用户选择文件。
具体的表单实现如下:
选择了文件后直接输入本地文件的绝对路径,表单的action属性值是*.jsp,这意味着请求(包括上载的文件)将发送给*.jsp文件。
在这个过程中实际上就实现了HTTP方式的文件上载。
文件从客户端到服务器的上传是由HTTP协议的通用网关界面(CGI)支持的。
这种上载方式要求浏览器和WEB服务器两方面都能够支持Rfc1867。
JavaBean 通过ServletRequest类的getInputStream()方法获得一个客户端向服务器发出的数据流、分析上传的文件格式,根据分析结果将多个文件依次输出服务器端的目标文件中。
2.采用FTP协议实现多个文件的上传
FTP协议是Internet上用来传送文件的协议,规定了Internet上文件互相传送的标准。
在Java中实现这一功能是借助FtpClient类完成的。
具体实现过程:首先与FTP服务器建立连接。
然后初始化文件的传输方式,包括ASCII和BINARY两种方
式。
将文件输出到文件输入流FileInputStream中,FileInputStream中的数据读入字节数组中,字节数组中的数据写入输出流(利用write方法将数据写入到一个网络链接上)。
这样和源文件同名的一个文件就复制到了服务器端。
以上两种方式,采用FTP协议实现多个文件的上传比较容易实现。
利用FTP 协议上传文件一般是编写的客户端程序,服务器端的安全设置会比较复杂;而利用HTTP协议上传文件则是服务器端的应用程序,相对来说安全设置会比较简单。
通过测试发现FTP上传方式在传输大文件时速度是HTTP上传方式的几十倍甚至几百倍,但在传输小于1M的文件时却比HTTP上传方式稍慢一些。
所以两种传输方式各有优势。