首页 > 编程语言 >JavaWeb实现文件上传下载

JavaWeb实现文件上传下载

时间:2023-11-27 15:33:04浏览次数:31  
标签:文件 JavaWeb 上传下载 request 获取 smartupload 上传 String

JavaWeb中实现文件上传下载
使用jar包:smartupload.jar,该包封装了IO流的操作,如果使用Java自带的IO操作会比较繁琐

文件上传的基本步骤
@WebServlet(urlPatterns = "/uploads",name = "UploadServlet")
//创建文件上传对象
SmartUpload smartupload = new SmartUpload();
//初始化上传操作
PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this,req,resp,null,false,1024,true);
smartupload.initialize(pageContext);
//也可使用以下方法初始化
//smartupload.initialize(this.getServletConfig(),request,response);
//设置编码
smartupload.setCharset('utf-8');
//上传准备
smartupload.upload()
//保存到指定文件夹下
smartupload.saveAs("/imgs");

//获取文件信息 1、通过传入下标的方式获取文件 2、获取文件名 3、获取文件类型 4.获取文件扩展名
File file = smartUpload.getFiles().getFile(0)
String name = file.getFileName();
String contentType = file.getContentType();
String ext = file.getFileExt()

//通过该种方式上传可以指定文件的名称 获取客户端的IP地址,以该IP作为文件名称
String uploadPath = "/uploadfiles/"+request.getRemoteAddr()+ext;
//保存到指定路径 第二个参数表示当前的文件要传入到虚拟路径上
file.saveAs(uploadPath,File.SAVES_VIRTUAL);


Q:pageContext对象是jsp的内置对象,那么在Servlet中该怎么获取呢?
PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this,req,resp,null,false,1024,true)
/* 参数讲解
this -- 代表servlet对象
null -- 该处需要传入字符串,代表页面错误时需要跳转的页面
false -- 该处代表是否需要使用session,需要则填true
1024 -- 该处代表设置的缓冲区的大小,缓冲区是个字节数组,所以是字节为单位
true -- 代表当缓冲区满的时候溢出时自动刷新到输出流还是抛出IOException异常。true为自动刷新
*/

smartupload常用方法
//将全部文件保存到指定目录下,并返回保存的文件个数
public int save(String pathName)
//指定允许上传的文件扩展名,接受一个扩展名列表,逗号分隔
public void setAllowFilesList(String fileList)
//指定了禁止上传的文件扩展名列列表,每个扩展名间以逗号分隔
public void setDeniedFilesList(String fileList)
//设定每个文件允许上传的最大长度
public void setMaxFileSize(long filesize)
//设定允许上传文件的总长度
public void setTotalMaxFileSize(long totalfilesize)

Jsp上传页面的代码如下:
<!-- 注:(1)form标签中要添加enctype属性 (2)提交方式必须是post,否则报错 -->
<form action="smartupload.jsp" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="uname"><br/>
照片:<input type="file" name="pic"><br/>
<input type="submit" value="上传">
</form>

Q:表单使用**enctype=“multipart/form-data”**进行了二进制的封装,无法使用request.getParameter()方法获取值了,而是二进制的byte流了,那么如何获取表单内uname属性的值呢?

A:这个时候如果想要获取表单中的请求值,只有使用SmartUpload中的方法getRequest.getParameter()方法进行获取。即使用SmartUpload中封装好的Request对象获取请求参数

//注意:必须放在上传准备smartupload.upload()的后面
//解决乱码 new String(uname.getBytes("GBK"),"utf-8")
String uname = smartupload.getRequest.getParameter("name");

文件下载基本步骤
@WebServlet(urlPatterns = "/downimg",name = "DownServlet")
//获取需要下载的文件名称 然后去对应的存放文件的路径中寻找
String filename = request.getParameter("filename");
String path = "/imgs/"+filename;
//设置响应类型,表示返回的的是流
response.setContentType("application/octet-stream");
//添加头信息 使用URLEncoder内的方法指定编码,防止文件名乱码
response.addHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(filename,"UTF-8"));
//跳转页面
request.getRequestDispatcher(path).forward(request,response);
//清空缓存区
response.flushBuffer();

Jsp下载页面代码
<a href="${pageContext.request.contextPath}/downimg?filename=like.png">下载</a>

参考文章:http://blog.ncmem.com/wordpress/2023/11/27/javaweb%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e4%b8%8b%e8%bd%bd/

欢迎入群一起讨论

 

 

标签:文件,JavaWeb,上传下载,request,获取,smartupload,上传,String
From: https://www.cnblogs.com/songsu/p/17859469.html

相关文章

  • 遇到Qt使用UI文件无法连接信号问题
    1.手动加载UI文件代码如下: 以上代码pushButton按钮在状态切换时,无法接收到信号,经过调试发现调用"connect"时变量“lineWidget”各个成员都是空指针,但是"connect"函数并没有报异常。2.查看"setupUI"函数,其片段如下: 可以发现,其实创建对象都是在"setupUi"中完成。3......
  • Winows11-hosts文件无法修改保存
    Win11系统hosts文件无法修改保存新近使用win11新电脑修改hosts,添加IP和主机名映射,保存时提示host无法修改。解决办法:1、将hosts文件的权限“只读”勾选去掉。进入hosts文件目录:C:\Windows\System32\drivers\etc,右键点击hosts文件,选择属性,把只读给去掉,这样才能进行修改。2、......
  • logstash 配置文件语法介绍
    大家好,我是蓝胖子,之前在构建服务监控实践那个系列里,有提到用logstash来做日志的收集,但是对于logstash的配置文件语法没有做很详细的介绍,今天就来详细聊聊logstash配置文件的语法。很多时候一门新框架的配置都会有自己独有的配置文件格式,是先简单了解配置文件语法结构,能够让自己......
  • 多线程复制文件夹
    pThread复制文件夹C++通过pthread复制文件夹。主要处理普通文件和链接文件。事实上只要处理好链接文件即可。我们可以通过判断链接的文件是文件夹还是文件即可判断对当前文件是通过文件直接复制还是通过文件夹递归复制。#include<iostream>#include<dirent.h>#include<stri......
  • Windows 11 中的蓝牙版本和配置文件支持
    Windows11支持哪些蓝牙版本?Windows11版本22H2,所有版本都支持蓝牙核心规范版本5.3。WindowsServer 没有 内置蓝牙无线技术支持。独立硬件供应商可能(IHV)提供第三方蓝牙驱动程序。哪些蓝牙配置文件在Windows11中具有内置支持?核心规范Windows11支持蓝牙核心规......
  • Linux重要的日志文件
    1、/var/log/boot.log该文件记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息2、/var/log/syslog只记录警告信息,常常是系统出问题的信息,所以更应该关注该文件3、/var/log/wtmp该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件4、/var/ru......
  • 特斯拉开源 Roadster 文件随便用;微软 Copilot AI 技术开放或不对大陆开放丨 RTE 开发
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • 上传文件 - 常用MIME类型
    后缀名MIME名称*.3gppaudio/3gpp,video/3gpp*.ac3audio/ac3*.asfallpication/vnd.ms-asf*.auaudio/basic*.csstext/css*.csvtext/csv*.docapplication/msword*.dotapplication/mswor......
  • JavaWeb实现简单的文件上传和下载
    一、文件上传1.1文件上传的简单实现前端的标签介绍①需要一个<form>表单标签,请求方式为post请求PS:因为get请求时url有长度限制,而带有文件上传的url一般会超出get请求的长度限制,所以只能用post②<form>标签中需添加enctype属性,属性值必须为multipart/form-dataenctype属性:enc......
  • Python logging 模块 捕获异常,并保存为 logging 文件
    示例一:logging模块简单使用 basicConfig#!/usr/bin/python2.7#-*-coding:utf-8-*-"""@author:tz_zs"""importloggingimporttimeimporttracebackimportsyslogging.basicConfig(level=logging.DEBUG,form......