smartupload文件上传!

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 使用 `smartupload.jar` 实现文件上传和下载。首先将 `smartupload.jar` 添加到项目中,然后创建上传页面,确保表单使用 `POST` 方法并设置 `enctype="multipart/form-data"`。接着在服务器端通过 `SmartUpload` 对象处理文件上传,保存文件到指定目录,并获取表单中的其他数据。最后,实现文件下载功能,设置响应头以触发浏览器下载文件。

[TOC]

使用smartupload.jar实现文件上传

1.将jar包添加到项目中:smartupload.jar

2.准备上传的页面

 <form action="toUpload" method="post"  enctype="multipart/form-data" >
    书名:<input type="text" name="bookName"/><br>
     图片:<input type="file" name="自定义名称"/><br>
    <input type="submit" value="提交"/>
</form>
AI 代码解读

注:(1)form标签中要添加enctype属性

​ (2)提交方式必须是post

3.开始获取数据,保存文件

实例代码:

public void upload(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        try {
            //上传文件
            SmartUpload su=new SmartUpload();
            //获得pageContext对象
            JspFactory factory=JspFactory.getDefaultFactory();
            PageContext pagecontext=
                factory.
                getPageContext(this, request,response,
                                 null,false,1024,true);
            su.initialize(pagecontext);
            su.setCharset("utf-8");
            //实现文件数据的上传
            su.upload();

            File file = su.getFiles().getFile(0);
            //得到文件的基本信息
            String filename=file.getFileName();
            String type=file.getContentType();
            System.out.println("type="+type);
            String url="uploadfile/"+filename;
            //将上传文件保存到指定目录
            file.saveAs(url, SmartUpload.SAVE_VIRTUAL);
            request.setAttribute("filename",filename);

            String uname=su.getRequest().getParameter("uname");
            System.out.println("uname="+uname);
            request.getRequestDispatcher("success.jsp").forward(request, response);    

        } catch (SmartUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }    
    }
AI 代码解读

注:(1)此时如果表单中有其他数据时,不能通过request直接获取,需要通过SmartUpload对象获取

​ String name=su.getRequest().getParameter("bookName");

​ 并且该代码要在SmartUpload操作完成后添加

​ (2)解决乱码:

​ new String(name.getBytes("GBK"),"utf-8")

注:斜杠方向:/

注意:

img

参数 含义
servlet 请求的servlet,在servlet中传this即可
request servlet上挂起的当前请求
response servlet上挂起的当前响应
errorPageURL 请求JSP的错误页面的URL,或null
needsSSession 是否需要session
buffer 以字节为单位的缓冲区大小
autoflush 缓冲区应该在缓冲区溢出时自动刷新到输出流,还是抛出IOException

smartupload常用方法

image-20200616145259860

文件下载

String name=request.getParameter("filename");
   String url="uploadfile/"+name;
    //将响应的内容设置为通用的二进制流
response.setContentType("application/octet-stream");
//attachment 告诉浏览器以附件的方式下载文件(弹出下载框)
name=URLEncoder.encode(name,"utf-8");
response.addHeader("Content-Disposition","attachment;filename="+name);

request.getRequestDispatcher(url).forward(request, response);
//清空缓冲区:将服务端缓冲区的文件内容,立即权并不传送给客户端
response.flushBuffer();
AI 代码解读

1024,

相关文章
git工具使用教程全讲解
本文介绍了版本控制的概念及其重要性,详细对比了多种版本控制工具,如VSS、CVS、SVN和Git,重点讲解了Git的基本使用方法、工作原理及与SVN的区别。此外,文章还介绍了GitHub、GitLab和Gitee等流行的代码托管平台,以及如何在这些平台上注册账号、创建和管理仓库。最后,文章还提供了如何在IntelliJ IDEA中配置和使用Git的具体步骤。
268 1
java电商项目(三)
本文介绍了乐购商城的商品数据分析和管理功能。首先解释了SPU(标准产品单位)和SKU(库存量单位)的概念,以及它们在商品管理和销售中的作用。接着详细分析了SPU、SPU详情和SKU三个表的结构及其关系。文章还介绍了商品管理的需求分析、实现思路和后台代码,包括实体类、持久层、业务层和控制层的实现。最后,文章讲解了前端组件的设计和实现,包括列表组件、添加修改组件、商品描述、通用规格、SKU特有规格和SKU列表的处理。通过这些内容,读者可以全面了解乐购商城的商品管理和数据分析系统。
111 0
java电商项目(十二)
本文接续前几个文章的项目进行讲解
137 1
transformers+huggingface训练模型
本教程介绍了如何使用 Hugging Face 的 `transformers` 库训练一个 BERT 模型进行情感分析。主要内容包括:导入必要库、下载 Yelp 评论数据集、数据预处理、模型加载与配置、定义训练参数、评估指标、实例化训练器并开始训练,最后保存模型和训练状态。整个过程详细展示了如何利用预训练模型进行微调,以适应特定任务。
625 3
在使用 `new` 关键字创建对象时,如果忘记添加 `new` 关键字会发生什么?
【10月更文挑战第31天】`SafeConstructor` 函数中,通过检查 `this` 是否为 `SafeConstructor` 的实例来判断是否使用了 `new` 关键字。如果没有使用,则自动使用 `new` 关键字重新调用自身,确保始终返回一个正确的对象实例。
java电商项目(二)
本文档详细介绍了商品分类和规格参数的实现过程。商品分类分为三级管理,主要用于首页商品导航和后台商品管理,采用树状结构存储。规格参数则用于描述商品的具体属性,包括SPU和SKU的定义,规格参数与分类绑定,支持搜索过滤。文档涵盖了表结构设计、实体类、持久层、业务层、控制层的实现,并提供了前端组件的示例代码,确保前后端无缝对接。
139 1
如何实现一个项目,小白做项目-java
本教程涵盖了从数据库到AJAX的多个知识点,并详细介绍了项目实现过程,包括静态页面分析、数据库创建、项目结构搭建、JSP转换及各层代码编写。最后,通过通用分页和优化Servlet来提升代码质量。
154 1
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
153 1
javaweb中MVC讲解!
JavaWeb MVC是一种设计模式,用于将Web应用的模型(Model)、视图(View)和控制器(Controller)分离,以实现职责解耦。模型负责数据管理和业务逻辑,视图负责展示数据,控制器负责处理用户请求并协调模型和视图。三层架构则将应用分为表现层、业务逻辑层和数据访问层,每层各司其职,提高系统的灵活性和可维护性。MVC主要应用于表现层,而三层架构则更侧重于整体系统结构。两者可以共存,共同提升项目的开发效率和质量。
238 1
java会话跟踪和拦截器过滤器
本文介绍了Web开发中的会话跟踪技术——Cookie与Session,以及过滤器(Filter)和监听器(Listener)的概念和应用。Cookie通过在客户端记录信息来识别用户,而Session则在服务器端保存用户状态。过滤器用于拦截和处理请求及响应,监听器则监控域对象的状态变化。文章详细解释了这些技术的实现方式、应用场景和主要方法,帮助开发者更好地理解和使用这些工具。
118 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问