SmartUpload组件实现文件上传

article/2025/10/14 15:14:33


调试好几天的程序,原来是软件版本的原因,我靠,能说脏话吗?好吧,当然这个过程虽然痛苦,但程序猿要学会享受同bug战斗的乐趣。

实现过程:
1、将下载好的smartupload.jar文件导入项目lib夹中

这里说明:如果不用MyEclipse工具,要注意把这个jspsmartupload.jar包用解压缩文件打开,就能看到里面的文件夹目录,让我进一步体会了导入包的概念和实质:
(解压图解)



<%@page import="com.jspsmart.upload.*"%>导入的包的实质是这些class文件和META-INF文件:


否则会出现错误:
Generated servlet error:SmartUpload cannot be resolved to a type

2、编写实现自动命名的工具类IPTimeStamp:


package zz.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class IPTimeStamp{
private SimpleDateFormat sdf = null;
private String ip = null;
public IPTimeStamp(){    
}
public IPTimeStamp(String ip){	// 接收IP地址
this.ip = ip;
}
public String getIPTimeRand(){	// 得到IP地址+时间戳+三位随机数
StringBuffer buf = new StringBuffer();	// 实例化StrintBuffter对象
if(this.ip != null) {
String s[] = ip.split("\\.");	// 按.进行拆分
//System.out.println(s.length);
for(int i = 0; i < s.length; i++)
buf.append(addZero(s[i], 3));	// 不够三位要补0
}
buf.append(getTimeStamp());
Random random = new Random();	
for(int j = 0; j < 3; j++)	{// 增加一个三位的随机数
buf.append(random.nextInt(10));
}
return buf.toString();		// 返回名称
}
public String addZero(String str, int len){
StringBuffer buf = new StringBuffer();
buf.append(str);
while(buf.length() < len){	// 如果不够指定位数要在前面补0	
buf.insert(0, "0");		
} 
return buf.toString();
}
public String getTimeStamp(){
sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
return this.sdf.format(new Date());
}
}

测试程序:
 public static void main(String []args){
System.out.println(new IPTimeStamp("172.19.34.25").getIPTimeRand());
}
上传表单upload_demo_01.htm:
<html>
<head><title>上传单个图片</title></head>
<body>
<form action="upload_demo_03.jsp" method="post" enctype="multipart/form-data">
姓名:<input type = "text" name = "uname"><br>
照片:<input type="file" name ="pic"><br>
<input type="submit" value="上传"><input type="reset" value="重置">
</form>
</body>
</html>



增加自动命名功能upload_demo_01.htm:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="com.jspsmart.upload.*"%>
<%@ page import="zz.util.IPTimeStamp"%>
<html>
<head><title>上传自动命名的文件</title></head>
<body>
<% request.setCharacterEncoding("GBK");%>
<%
SmartUpload smart = new SmartUpload();	// 实例化SmartUpload组件
smart.initialize(pageContext);	// 初始化上传操作
smart.upload();			// 上传准备
IPTimeStamp its = new IPTimeStamp(request.getRemoteAddr());	// 取得客户端IP地址
String ext = smart.getFiles().getFile(0).getFileExt();		// 取得文件后缀
String fileName = its.getIPTimeRand() + "." + ext;	// 拼凑文件名称
smart.getFiles().getFile(0).saveAs(getServletContext().getRealPath("/")+ "upload"+java.io.File.separator + fileName);	// 保存文件
String name = smart.getRequest().getParameter("uname");	// 接收请求参数
%>
<h2>姓名:<%=name%></h2>
<img src = "../upload/<%=fileName%>" width="180" height="240">
</body>
</html>

再次出现编译错误:

org.apache.jasper.JasperException:Exception in JSP:

javax.servlet.ServletException: File can't be saved

查了N多资料,最后一怒之下把把tomcat5.5卸载了,装了tomcat6.0,文件上传问题被KO!很汗吧……
上传表单界面:



上传后效果:




自动命名情况(其它上传的照片结果):


PS:我喜欢华仔!
为了庆祝自己经过几天KO掉程序bug,特上传本淫照片一张:




当然还有个问题: IPTimeStamp its = new IPTimeStamp(request.getRemoteAddr());// 取得客户端IP地址
得到我的本机IP地址,只有显示前3位127,可能是浏览器防火墙设置的问题。
注意:

1、如果要进行文件上传操作,在表单处必须使用enctype将文件封闭成一个二进制数据才可以接收。

2、如何限制文件上传类型?

答:通过正则表达式

If(smart.getFiles().getFile(0).getFileName() . match(“^\\w+\\.(gif|jsp) $”)){
}


回头仔细看这程序,包含的信息量非常大:

1、取得IP

2、后缀名过滤

3、随机数(抽牌算法)

4、时间类

5、String类对正则验证的支持



http://chatgpt.dhexx.cn/article/5Y9M5nCw.shtml

相关文章

SmartUpload使用和简介

原文地址为&#xff1a; SmartUpload使用和简介 用以下代码生成文件名即可 1 package info.haowei.util; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5 import java.util.Random; 6 7 public class IPTimeStamp { 8 9 10 private SimpleDat…

SmartUpload应用

首先&#xff0c;在讲SmartUpload应用前&#xff0c;我讲一个简单实用的文件编辑器&#xff08;编辑器可以调节字体大小、样式、颜色以及插入表情图标等功能&#xff09;。 文件编辑器——如图所示&#xff1a;1-1 设置文件编辑器步骤&#xff1a; 1、复制fckeditor包到项目。…

smartupload 的简单使用(上传)

今天。。。省略一万字&#xff0c;反正恨死隔壁宿舍的老王&#xff0c;妈蛋&#xff0c;把我电脑老虎机的分数都输光了。。。。天啥的。。省略一万字 最近开始学习javaweb&#xff0c;想了想&#xff0c;下载还有上传是两个必须要学会的功能&#xff0c;所以就开始学习 学习j…

SmartUpload综合

实现文件的上传与下载&#xff0c;可以使用Java的I/O流的类来实现&#xff0c;也可以使用专业的上传、下载组件。这些组件提供了现成的类&#xff0c;程序员只需调用这些类中的方法即可实现文件的上传与下载。本章将向读者介绍如何应用jspSmartUpload组件实现文件的上传与下载。…

SmartUpload文件上传

准备工作&#xff1a;在eclipse中创建网页项目&#xff0c;再添加服务器&#xff0c;双击打开服务器&#xff0c;然后导入jar包 选择路径&#xff0c;指定你想发送的路径。然后点击服务器&#xff0c;右键添加项目&#xff0c;点击start之后准备工作就完成了 操作流程 创建一个…

jsp——SmartUpload上传下载

SmartUpload 简介 SmartUpload组件是www.jspsmart.com网站开发的一套上传组件&#xff0c;它使用简单&#xff0c;方便。有以下几个特点&#xff1a; 使用简单。在JSP中仅仅书写三五行java代码就可以搞定文件的上传或下载。 能全程控制上传。利用SmartUpload组件提供的对象及其…

应用程序与驱动程序交互函数DeviceIoControl详解

这种通信方式&#xff0c;就是驱动程序和应用程序自定义一种IO控制码&#xff0c;然后调用DeviceIoControl函数&#xff0c;IO管理器会产生一个MajorFunction 为IRP_MJ_DEVICE_CONTROL&#xff08;DeviceIoControl函数会产生此IRP&#xff09;&#xff0c;MinorFunction 为自己…

QT(C++)DeviceIoControl()函数的相关使用

Microsoft官网中有这个函数的介绍&#xff0c;对&#xff0c;仅仅就是介绍&#xff0c;有时候官网的查询结果也就只能看看…… 在我写过的一个软件中&#xff0c;我曾经多次使用该函数获取相关结果&#xff0c;现将我的使用经验分享给大家&#xff01; DeviceIoControl()函数将…

应用程序与驱动程序通信 DeviceIoControl

本文为转载&#xff0c;参考链接地址 https://blog.csdn.net/li_wen01/article/details/80137566 https://www.cnblogs.com/lsh123/p/7354573.html DeviceIoControl 将控制代码直接发送到指定的设备驱动程序&#xff0c;使相应的设备执行相应的操作。 这种通信方式&#xff…

IO设备控制操作--DeviceIoControl

1.除了ReadFile和WirteFile以外&#xff0c;应用程序还可以通过另外一个API DeviceIoControl 操作设备。DeviceIoControl内部会使操作系统创建一个IRP_MJ_DEVICE_CONTROL类型的IRP&#xff0c;然后操作系统会将这个IRP转发到派遣函数中。 2.I/O控制码&#xff08;IOCTL&#xf…

DeviceIoControl获取硬盘信息

参考&#xff1a;DeviceIoControl 函数详细解析 BOOL WINAPI DeviceIoControl(_In_ HANDLE hDevice,_In_ DWORD dwIoControlCode,_In_opt_ LPVOID lpInBuffer,_In_ DWORD nInBufferSize,_Out_opt_ LPVOID lpOutBuf…

windows driver - DeviceIoControl 用法

原文地址&#xff1a;https://www.cnblogs.com/lsh123/p/7354573.html 之前写过一篇关于通过DeviceIoControl函数来使应用程序与驱动程序通信的博客&#xff0c;这次再通过这个完整的代码来简要疏通总结一下。 这种通信方式&#xff0c;就是驱动程序和应用程序自定义一种IO控制…

@ControllerAdvice 用法

ControllerAdvice 用法 顾名思义&#xff0c;ControllerAdvice就是Controller 的增强版。ControllerAdvice主要用来处理全局数据&#xff0c;一般搭配ExceptionHandler、ModelAttribute以及InitBinder使用。 全局异常处理 ControllerAdvice最常见的使用场景就是全局异常处理…

驱动开发:应用DeviceIoContro模板精讲

在笔者上一篇文章《驱动开发&#xff1a;应用DeviceIoContro开发模板》简单为大家介绍了如何使用DeviceIoContro模板快速创建一个驱动开发通信案例&#xff0c;但是该案例过于简单也无法独立加载运行&#xff0c;本章将继续延申这个知识点&#xff0c;通过封装一套标准通用模板…

驱动开发:应用DeviceIoContro开发模板

内核中执行代码后需要将结果动态显示给应用层的用户&#xff0c;DeviceIoControl 是直接发送控制代码到指定的设备驱动程序&#xff0c;使相应的移动设备以执行相应的操作的函数&#xff0c;如下代码是一个经典的驱动开发模板框架&#xff0c;在开发经典驱动时会用到的一个通用…

deviceiocontrol(deviceiocontrol函数)

如何用DeviceIOControl读取并口信息 应用程序和驱动程序的通信过程是&#xff1a;应用程序使用CreateFile函数打开设备&#xff0c;然后用DeviceIoControl与驱动程序进行通信&#xff0c;包括读和写两种操作。还可以用ReadFile读数据用WriteFile写数据。操作完毕时用CloseHandl…

DeviceIOControl详解-各个击破

DeviceIoControl这个api我们用的不多&#xff0c;但是很重要&#xff0c;有时会帮助我们实现一些特别的需求, 如获取硬件设备信息、与硬件设备通信&#xff08;读写数据&#xff09;等&#xff0c;对照msdn&#xff0c;下面我们详细解释一下这个api的用法&#xff08;有什么错误…

DeviceIoControl 函数详细解析

前言&#xff1a; 最近需要对Windows中的设备进行编程操作&#xff0c;其中涉及到非常重要的函数DeviceIoControl&#xff0c;在使用的时候也比较的复杂&#xff0c;国内这一块中文资料比较少&#xff0c;在学习之余顺便将其翻译出来&#xff0c;以供参考&#xff0c;如有错误&…

操作系统原理(一)——自举过程

操作系统&#xff0c;这个名词每个人都不会陌生&#xff0c;但又总觉得似乎没有了解很深&#xff0c;这一系列博客将会从零开始强化你对操作系统的认知。 1. 什么是操作系统&#xff1f; 答&#xff1a;操作系统是介于硬件与用户&#xff08;也就是程序和人&#xff09;之间的…