<!---->
文件上传类
在这里看到很多讨论文件上传的文章,觉得各有利敝,有些只限于上传文件,而不能同时取得文本字段值,尤其是上传多个文件比较少,现本人做这个上传文件的类最多可支持上传255个文件,同时可取得文本字段值,请各位高手指正.
文件上传类:MoqUploadBean.java
package net.moq.www;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
*
* Title: 文件上传类
* Description: 既能对文件进行上传,又能取得输入框的值,最多可同时上传255个文件
* Copyright: Copyright (c) 2002
* Company: Tekson
* @author 莫琼
* @version 1.0
*/
public class MoqUploadBean {
private String[] sourceFile = new String[255]; //源文件名
private String[] suffix = new String[255]; //文件后缀名
private String canSuffix = ".gif.jpg.jpeg.png"; //可上传的文件后缀名
private String objectPath = "c:/"; //目标文件目录
private String[] objectFileName = new String[255]; //目标文件名
private ServletInputStream sis = null; //输入流
private String[] description = new String[255]; //描述状态
private long size = 100 * 1024; //限制大小
private int count = 0; //已传输文件数目
private byte[] b = new byte[4096]; //字节流存放数组
private boolean successful = true;
private Hashtable fields = new Hashtable();
public MoqUploadBean() {
}
//设置上传文件的后缀名
public void setSuffix(String canSuffix) {
this.canSuffix = canSuffix;
}
//设置文件保存路径
public void setObjectPath(String objectPath) {
this.objectPath = objectPath;
}
//设置文件保存路径
public void setSize(long maxSize) {
this.size = maxSize;
}
//文件上传处理程序
public void setSourceFile(HttpServletRequest request) throws IOException {
sis = request.getInputStream();
int a = 0;
int k = 0;
String s = "";
while ( (a = sis.readLine(b, 0, b.length)) != -1) {
s = new String(b, 0, a);
if ( (k = s.indexOf("filename=\"")) != -1) {
// 取得文件数据
s = s.substring(k + 10);
k = s.indexOf("\"");
s = s.substring(0, k);
sourceFile[count] = s;
k = s.lastIndexOf(".");
suffix[count] = s.substring(k + 1);
if (canTransfer(count)) {
transferFile(count);
}
++count;
} else if ( (k = s.indexOf("name=\"")) != -1) {
// 普通表单输入元素,获取输入元素名字
String fieldName = s.substring(k+6, s.length()-3);
sis.readLine(b, 0, b.length);
StringBuffer fieldValue = new StringBuffer(b.length);
while ( (a = sis.readLine(b, 0, b.length)) != -1) {
s = new String(b, 0, a-2);
if ( (b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) {
break;
} else {
fieldValue.append(s);
}
}
fields.put(fieldName, fieldValue.toString());
}
if (!successful)
break;
}
}
//取得表单元素值
public String getFieldValue(String fieldName) {
if (fields == null || fieldName == null) {
return null;
}
return (String) fields.get(fieldName);
}
//取得上传文件数
public int getCount() {
return count;
}
//取得目标路径
public String getObjectPath() {
return objectPath;
}
//取得源文件名
public String[] getSourceFile() {
return sourceFile;
}
//取得目标文件名
public String[] getObjectFileName() {
return objectFileName;
}
//取得上传状态描述
public String[] getDescription() {
return description;
}
//判断上传文件的类型
private boolean canTransfer(int i) {
suffix[i] = suffix[i].toLowerCase();
//这个是用来传图片的,各位可以把后缀名改掉或者不要这个条件
if (sourceFile[i].equals("") || (!(canSuffix.indexOf("."+suffix[i])>=0))) {
description[i] = "ERR: File suffix is wrong.";
return false;
}
else {
return true;
}
}
//上传文件转换
private void transferFile(int i) {
String x = Long.toString(new java.util.Date().getTime());
try {
objectFileName[i] = x + "." + suffix[i];
FileOutputStream out = new FileOutputStream(objectPath + objectFileName[i]);
int a = 0;
int k = 0;
long hastransfered = 0; //标示已经传输的字节数
String s = "";
while ( (a = sis.readLine(b, 0, b.length)) != -1) {
s = new String(b, 0, a);
if ( (k = s.indexOf("Content-Type:")) != -1) {
break;
}
}
sis.readLine(b, 0, b.length);
while ( (a = sis.readLine(b, 0, b.length)) != -1) {
s = new String(b, 0, a);
if ( (b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) {
break;
}
out.write(b, 0, a);
hastransfered += a;
if (hastransfered >= size) {
description[count] = "ERR: The file " + sourceFile[count] +
" is too large to transfer. The whole process is interrupted.";
successful = false;
break;
}
}
if (successful) {
description[count] = "Right: The file " + sourceFile[count] +
" has been transfered successfully.";
}
out.close();
if (!successful) {
sis.close();
File tmp = new File(objectPath + objectFileName[count]);
tmp.delete();
}
}
catch (IOException ioe) {
description[i] = ioe.toString();
}
}
public static void main(String[] args) {
System.out.println("Test OK");
}
}
文件上传调用:MoqUpload.jsp
〈%@ page contentType="text/html; charset=GB2312" %>
〈html>
〈head>
〈title>文件上载〈/title>
〈/head>
〈body>
〈form action="MoqUploadSubmit.jsp" enctype="MULTIPART/FORM-DATA" method="post">
作者姓名:〈input type="text" name="Author" />
〈br />
公司名称:〈input type="text" name="Company" />
〈br />
文件描述:〈input type="text" name="Comment" />
〈br />
选择文件1:〈input type="file" name="filename1" />
〈br />
选择文件2:〈input type="file" name="filename2" />
〈br />
选择文件3:〈input type="file" name="filename3" />
〈br />
选择文件4:〈input type="file" name="filename4" />
〈br />
〈input type="submit" value="上载" />
〈/form>
〈/body>
〈/html>
文件上传提交:MoqUploadSubmit.jsp
〈%@ page contentType="text/html;charset=gb2312"%>
〈jsp:useBean id="fileBean" scope="page" class="net.moq.www.MoqUploadBean" />
〈%
fileBean.setObjectPath("D:\\Temp\\");
fileBean.setSize(10000*1024);
fileBean.setSuffix(".gif.jpg.png.jpge.html.htm");
fileBean.setSourceFile(request);
String [] saSourceFile = fileBean.getSourceFile();
String [] saObjectFile = fileBean.getObjectFileName();
String [] saDescription = fileBean.getDescription();
int iCount = fileBean.getCount();
String sObjectPath = fileBean.getObjectPath();
for(int i=0;i〈iCount;i++) {
out.println("〈br>源始文件:");
out.println(saSourceFile[i]);
out.println("〈br>目标文件:");
out.println(sObjectPath+saObjectFile[i]);
out.println("〈br>上传说明:");
out.println(saDescription[i]);
out.println("〈br>");
}
out.println("〈br>作者:" + fileBean.getFieldValue("Author"));
out.println("〈br>公司:" + fileBean.getFieldValue("Company"));
out.println("〈br>说明:" + fileBean.getFieldValue("Comment"));
%>
<!----> |
相关推荐
Tomcat.JSP<br>JSWDK环境安装与配置<br>Resin服务器平台介绍<br>Resin在...文件上载<br>用jsp连接mySQL数据库<br>基本内置组件<br>JDBC应用示例<br>一个用JSP做的日历<br>JSP技巧集锦(一)<br>关于JSP写文件的补充<br...
<br>DFS文件读写<br>网络爬虫之Spider<br>Java正则表达式的总结关键词: Java正则表达式 <br>批量上传--采集 (多个文件夹)<br>The Agile Way<br>hibernate mapping文件中的标记详解:关系标记<br>ANT 安装使用及...
(自己的) <br/>◆ 111.htm 在VB中实现文件上传 <br/>◆ 112.htm 在VB中实现文件上载 <br/>◆ 113.htm 在VB中使用UDP协议 <br/>◆ 114.htm 在VB中用Outlook发电子邮件 <br/>◆ 115.htm 在WindowsNT网络中广播消息 ...
在表白主题的源码中,可能会使用`<img>`标签来展示浪漫的图片,`<audio>`或`<video>`标签来播放动人的音乐或视频,以及`<p>`标签来添加深情的文字内容。 其中,“表白网源码”可能是一个完整的HTML文件,包含了表白...
9. **拖放功能**:允许用户直接在网页上拖放元素,简化了文件上传和页面内容组织。 10. **Geolocation API**:获取用户的地理位置信息,为本地化服务和地图应用提供了可能。 11. **Form元素增强**:新增了<form>...
- `<input>`:类型包括`text`文本、`password`密码、`radio`单选、`checkbox`多选、`reset`重置、`file`文件上传、`submit`提交表单、`image`图形提交。 - `<button>`:定义按钮。 - `<select>`:定义下拉列表,...
当我们谈到“jsp上传文件的一些参考”,这是一个关于如何在JSP中实现文件上传功能的主题。在实际应用中,文件上传功能通常用于让用户提交图片、文档等数据到服务器,比如用户注册时上传头像或者在线投稿等场景。 ...
浅谈关于Android WebView上传文件的解决方案 一、Android WebView上传文件的解决方案概述 Android WebView上传文件是Android开发中常见的一种需求,特别是在接入第三方H5页面时,H5页面可能具有上传照片的功能。...
项目中使用vue-quill-editor富文本编辑器,在编辑内容的时候,我们往往会编辑图片,而vue-quill-editor默认的处理方式是直接将图片转成base64格式,导致上传的内容十分庞大,且服务器接受post的数据的大小是有限制的...
当谈到“将页面上传到免费托管”,这意味着我们需要了解如何将制作好的网页部署到互联网上。常见的免费托管平台如GitHub Pages、Netlify或Firebase Hosting等,它们提供了简单的步骤让初学者也能将网站公开。以...
fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,...
在本文中,我们将探讨如何使用Struts1框架与jQuery Form插件实现文件的异步上传。Struts1是一个历史悠久的...同时,jQuery Form插件的概念也可以迁移到其他前端库,如React或Vue,它们同样支持异步表单提交和文件上传。
"浅谈PHP中RAR压缩文件的处理" php是当前web开发中最流行的编程语言之一,而RAR压缩文件是常见的一种压缩格式。在web应用中,为了提高效率,上传的文件大多数都是以压缩包的形式存在的,因此如何在php中实现RAR...
这样的解决方案可以确保在各种浏览器环境中都能正确地设置表单的编码类型,从而保证文件上传等功能的正常运行。在实际开发中,我们还应该结合使用条件注释、Modernizr等工具,以便更好地处理浏览器兼容性问题。
"浅谈图片上传利用request.getInputStream()获取文件流时遇到的问题" 本文讨论了使用request.getInputStream()获取文件流时遇到的问题,并提供了两种获取文件流的方式,分别是使用DataInputStream和...
例如,使用`<script type=”text/javascript” src=”js/jquery.js”></script>`标签引入文件后,便可以在页面的任意地方使用jQuery提供的语法。 4. jQuery常用语法:介绍了jQuery的多种元素引用方式,包括通过id、...
layui 的上传控件使得在网页上实现文件上传变得简单而高效,它支持多种功能,如多文件选择、文件预览、上传进度显示等。 在开始使用 layui 的上传控件之前,首先需要在 HTML 页面中引入 layui 的 CSS 和 JS 文件。...
</div></div></div></div> <SCRIPT src="$_G['style']['styleimgdir']/js/hxportal.js" type=text/javascript></SCRIPT> <script type="text/ecmascript">hxportal.loadThreadList({fid:2,target:'#sec4_1_c'});</...
解决方法是确保上传的音频文件质量与格式在所有目标平台上都能正确解析。如果音频文件经过压缩,可能导致元数据丢失或解析错误。 为了确保兼容性,可以尝试以下步骤: 1. 使用标准格式:尽可能使用常见的音频格式...