利用SmartUpload组件实现文件上传与下载

article/2025/10/14 15:14:58

创建Web项目SmartUpload
在这里插入图片描述
在WEB-INF目录里创建lib子目录,加入jspSmartUpload.jar
在这里插入图片描述
在web目录里创建上传子目录upload,用于存放上传文件
在这里插入图片描述
在web目录修改首页文件index.html
在这里插入图片描述
在web目录创建上传页面upload.html
在这里插入图片描述
在web目录里创建处理上传的页面do_upload.jsp
在这里插入图片描述

<%@ page import="com.jspsmart.upload.SmartUpload" %>
<%@ page import="com.jspsmart.upload.File" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%!
// 声明文件名及扩展名
String filename, ext;
%>
<%// 实例化上传组件SmartUpload su = new SmartUpload();// 初始化上传su.initialize(pageContext);// 定义上传文件的最大尺寸(单位:字节)long FILE_MAX_SIZE = 400000;// 判断上传文件类型是否符合要求try {// 设置上传文件类型su.setAllowedFilesList("jpg,gif,png,bmp");// 上传文件su.upload();} catch (Exception e) {out.print("<script type='text/javascript'>" +"      alert('只能上传jpg, gif, png或bmp文件!');" +"      window.location = 'upload.html';" +"</script>");}// 获取上传的第一个文件File file = su.getFiles().getFile(0);// 判断是否获取文件if (file.isMissing()) {out.print("<script type='text/javascript'>" +"      alert('上传文件失败,请再次选择文件上传!');" +"      window.location = 'upload.html';" +"</script>");} else {// 判断文件大小是否符合要求if (file.getSize() <= FILE_MAX_SIZE) {// 获取上传文件的文件名filename = file.getFieldName();// 获取上传文件的扩展名ext = file.getFileExt();// 利用时间戳与随机整数修改文件名filename = filename + String.valueOf(System.currentTimeMillis()) + String.valueOf((int) (900 * Math.random()) + 100);// 获取应用程序的真实路径(物理路径)String realPath = application.getRealPath("/");// 构建上传文件的urlString url = realPath + "upload\\" + filename + "." + ext;// 将上传文件保存到指定的位置file.saveAs(url, SmartUpload.SAVE_PHYSICAL);// 提示用户上传成功out.print("文件上传成功!<br/>");out.print("保存位置:" + url + "<br/>");} else {out.print("<script type='text/javascript'>" +"      alert('上传文件太大,上传失败!');" +"      window.location = 'upload.html';" +"</script>");}}// 获取表单提交的姓名数据String name = su.getRequest().getParameter("name");// 对姓名数据进行转码name = new String(name.getBytes(), "utf-8");
%>
姓名:<%= name %><br/>
照片:<br/>
<img src="upload/<%= filename %>.<%= ext %>" width="300" height="250">
</body>
</html>

重启服务器,显示运行结果
在这里插入图片描述
在web目录里创建下载页面download.html
在这里插入图片描述
在web目录里创建处理下载页面do_download.jsp
在这里插入图片描述

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%@ page import="java.io.FileInputStream" %>
<%@ page import="java.io.File" %>
<%@ page import="java.io.BufferedOutputStream" %>
<%@ page import="java.io.BufferedInputStream" %><%// 获取下载文件名String filename = request.getParameter("filename");// 获取下载文件路径String filePath = application.getRealPath("/upload/" + filename);boolean isInline = false; // 不允许浏览器直接打开// 清空缓冲区, 防止页面的空行, 空格添加到要下载的文件内容中去// 如果不清空的话在调用 response.reset() 的时候Tomcat会报错out.clear();try {File file = new File(filePath);if (file.exists() && file.canRead()) { // 文件存在且可读// 从服务器的配置来读取文件的 contentType 并设置此contentType, 不推荐设置为// application/x-download, 因为有时候我们的客户可能会希望在浏览器里直接打开,// 如 Excel 报表, 而且 application/x-download 也不是一个标准的 mime type,// 似乎 FireFox 就不认识这种格式的 mime type/*MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。 */String mimetype = null;mimetype = application.getMimeType(filePath);if (mimetype == null) {mimetype = "application/octet-stream;charset=ISO-8859-1";}response.setContentType(mimetype);// IE 的话就只能用 IE 才认识的头才能下载 HTML 文件, 否则 IE 必定要打开此文件!String ua = request.getHeader("User-Agent");// 获取客户端浏览器类型if (ua == null) {ua = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;)";}boolean isIE = ua.toLowerCase().indexOf("msie") != -1;// 判断用的是否为IE浏览器if (isIE && !isInline) { //用户采用的是IE浏览器而且不允许浏览器直接打开mimetype = "application/x-msdownload";}// 让客户端保存文件时显示正确文件名, 需要将文件名转换为 ISO-8859-1 编码String downFileName = new String(file.getName().getBytes(),"ISO-8859-1");String inlineType = isInline ? "inline" : "attachment";// 是否内联附件// or using this, but this header might not supported by FireFox//response.setContentType("application/x-download");response.setHeader("Content-Disposition", inlineType+ ";filename=\"" + downFileName + "\"");// 设置下载内容大小response.setContentLength((int) file.length());// 创建缓冲区byte[] buffer = new byte[4096];BufferedOutputStream output = null;BufferedInputStream input = null;try {output = new BufferedOutputStream(response.getOutputStream());// 源文件:输入流input = new BufferedInputStream(new FileInputStream(file));int n = -1;while ((n = input.read(buffer, 0, 4096)) != -1) {output.write(buffer, 0, n);}response.flushBuffer();} catch (Exception e) {out.write(e.toString());} // 用户可能取消了下载finally {if (input != null)input.close();if (output != null)output.close();}} else {out.println("文件不存在或不允许访问!");}} catch (Exception ex) {out.println(ex.toString());}
%>

重启服务器,查看下载文件运行效果
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/4gH5eVbI.shtml

相关文章

smartupload下载

首先&#xff0c;很不幸的&#xff0c;今天是周一&#xff0c;所以今天要上课&#xff0c;但是很幸运的&#xff0c;早上没课&#xff0c;但是又不幸的早起习惯了&#xff0c;所以我说了很多废话来消磨时间&#xff0c; 上篇说了怎么用上smartupload来上传文件到服务器端&…

使用smartupload进行文件上传

关于文件上传的代码&#xff0c;只有百度一下都能找到一大堆。但是可惜大多数都使用的是jsp来处理上传&#xff0c;而使用servlet处理文件上传的文章是比较少的。但是不管是jsp还是servlet处理都会跳转但是这样就很难看了。这就要使用到js内嵌的框架了。这样页面看起来就不会跳…

SmartUpload组件实现文件上传

调试好几天的程序&#xff0c;原来是软件版本的原因&#xff0c;我靠&#xff0c;能说脏话吗&#xff1f;好吧&#xff0c;当然这个过程虽然痛苦&#xff0c;但程序猿要学会享受同bug战斗的乐趣。 实现过程&#xff1a; &#xff11;、将下载好的smartupload.jar文件导入项目l…

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;有什么错误…