java上传和下载文件代码_JavaWeb中上传和下载文件实例代码

一丶先引入上传下载的lib

cdbfb89594c5491f9a1e300cb7d68329.png

二丶上传的的servlet

package com.test.action;

import java.io.file;

import java.io.fileoutputstream;

import java.io.ioexception;

import java.io.inputstream;

import java.io.outputstream;

import java.util.list;

import javax.servlet.servletexception;

import javax.servlet.annotation.webservlet;

import javax.servlet.http.httpservlet;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpservletresponse;

import org.apache.commons.fileupload.fileitem;

import org.apache.commons.fileupload.fileuploadexception;

import org.apache.commons.fileupload.disk.diskfileitemfactory;

import org.apache.commons.fileupload.servlet.servletfileupload;

@webservlet("/upload")

public class fileuploadaction extends httpservlet {

private static final long serialversionuid = 1l;

protected void dopost(httpservletrequest request,

httpservletresponse response) throws servletexception, ioexception {

// 设置编码

request.setcharacterencoding("utf-8");

//对提交的数据进行处理,保存上传文件

boolean success = processupload(request);

if(success){

//获取表单text控件的值

string account = request.getattribute("account").tostring();

system.out.println(account);

//获取文件上传的原始名称

string filename = request.getattribute("upfile").tostring();

system.out.println(filename);

//获取文件上传后,服务器上保存的名字

string filenameserver = request.getattribute("upfileserver").tostring();

system.out.println(filenameserver);

request.setattribute("upfile", filenameserver);

request.setattribute("message", "上传成功");

}

request.getrequestdispatcher("/upload.jsp").forward(request, response);

}

private boolean processupload(httpservletrequest request) {

boolean success = true;

string message = null;

// 获取文件需要上传到的路径

string path = request.getservletcontext().getrealpath("/upload");

system.out.println(path);

// 如果此文件夹不存在,则构造此文件夹

file f = new file(path);

if (!f.exists()) {

f.mkdir();

}

// 构造出文件工厂,用于存放jsp页面中传递过来的文件

diskfileitemfactory factory = new diskfileitemfactory();

// 设置上传文件的保存路径

factory.setrepository(f);

// 设置缓存大小,如果文件大于缓存大小时,则先把文件放到缓存中

factory.setsizethreshold(1 * 1024 * 1024);

servletfileupload upload = new servletfileupload(factory);

// 设置可以上传文件大小的上界20mb

upload.setsizemax(20 * 1024 * 1024);

try {

// 可以上传多个文件

list list = (list) upload.parserequest(request);

for (fileitem item : list) {

// 获取表单的属性名字

string name = item.getfieldname();

if (item.isformfield()) {

string value = item.getstring();

//解决乱码问题

value = new string(value.getbytes("iso-8859-1"),"utf-8");

request.setattribute(name, value);

} else {

// 获得文件类型

string contenttype = item.getcontenttype();

// 获得文件大小

long filesize = item.getsize();

// 获取路径名

string value = item.getname();

// 索引到最后一个反斜杠

int start = value.lastindexof("\\");

// 截取 上传文件的 字符串名字,加1是 去掉反斜杠,

string filename = value.substring(start + 1);

if (filename != null && !filename.trim().equals("")) {

// 如果上传的文件不是图片,那么不上传

string allimgext = ".jpg|.jpeg|.gif|.bmp|.png|";

string extname = filename.substring(filename.indexof("."), filename.length());

if (allimgext.indexof(extname + "|") == -1) {

message = "该文件类型不允许上传。请上传 " + allimgext

+ " 类型的文件,当前文件类型为" + extname;

success = false;

break;

}

request.setattribute(name, filename);

// 随机数产生名称

string newname = system.currenttimemillis() + extname;

request.setattribute(name + "server", newname);

// 将文件保存到服务器中

inputstream in = item.getinputstream();

// 原文件名

// outputstream out = new fileoutputstream(new file(path, filename));

// 随机数文件名

outputstream out = new fileoutputstream(new file(path,

newname));

int length = 0;

byte[] buf = new byte[1024];

while ((length = in.read(buf)) != -1) {

out.write(buf, 0, length);

}

in.close();

out.close();

}

}

}

} catch (fileuploadexception e) {

message = "文件的内容过大,请上传小于20mb的文件" ;

success = false;

e.printstacktrace();

} catch (ioexception e) {

success = false;

e.printstacktrace();

}

request.setattribute("message", message);

return success;

}

}

三丶下载的servlet

package com.test.action;

import java.io.file;

import java.io.fileinputstream;

import java.io.ioexception;

import java.io.outputstream;

import javax.servlet.servletexception;

import javax.servlet.annotation.webservlet;

import javax.servlet.http.httpservlet;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpservletresponse;

@webservlet("/download")

public class filedownloadaction extends httpservlet {

private static final long serialversionuid = 1l;

protected void doget(httpservletrequest request,

httpservletresponse response) throws servletexception, ioexception {

string id = request.getparameter("id");

// 根据主键读取文件的真实名字 + 服务器上的名字

processdownload("1444442288605.png", "腾讯.png", request, response);

}

private boolean processdownload(string filename, string savename,

httpservletrequest request, httpservletresponse response) {

boolean success = true;

// 获取文件下载所在的路径

string path = request.getservletcontext().getrealpath("/upload");

file fileload = new file(path, filename); // 下载文件

long filelength = fileload.length(); // 文件大小

byte[] buffer = new byte[1024]; // 缓冲字节数组

try {

response.reset();

response.setheader("content-disposition", "attachment;filename=\""

+ new string(savename.getbytes("gb2312"), "iso-8859-1") + "\"");

response.setcontenttype("application/octet-stream");

response.setheader("content_length", string.valueof(filelength));

outputstream os = response.getoutputstream();

fileinputstream in = new fileinputstream(fileload);

int hasread = 0;

while ((hasread = in.read(buffer)) != -1) {

os.write(buffer, 0, hasread);

}

os.flush();

os.close();

in.close();

} catch (ioexception e) {

success = false;

e.printstacktrace();

}

return success;

}

}

以上所述是小编给大家介绍的javaweb中上传和下载文件实例代码,希望对大家有所帮助

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统:Linux 环境变量配置的 6 种方法

目录 Linux环境变量配置 Linux读取环境变量 Linux环境变量配置方法一:export PATH Linux环境变量配置方法二:vim ~/.bashrc Linux环境变量配置方法三:vim ~/.bash_profile Linux环境变量配置方法四:vim /etc/bashrc Linux环境变量…

操作系统:Win10有哪些版本,看完你就知道了

目录 一、win10家庭版 二、win10专业版 三、win10企业版 四、win10教育版 Win10有四个版本是我们最常见的:win10家庭版、win10专业版、win10企业版、win10教育版。 今天就主要说这4个比较经典的版本,一起来看看吧! 一、win10家庭版 一般来说&…

硬件知识:打印机常见的故障及维护,值得收藏

一、打印时不出墨症状 打印机在联机或自检时,打印头有动作,但打印不出墨。故障分析 这一情况发生,有多方面原因,可能包括喷头故障,清洁单元故障,电镀及电路板故障等,但在排除了喷头故障后可以这…

mac下SecureCRT连接阿里云服务器最新教程

一.首先进入自己的阿里云管理控制台 地址 https://ecs.console.aliyun.com/?spm5176.6660585.774526198.1.57c96bf8inrLvC#/home 二:输入密码 三:点击密码重置 四:打开SecureCRT 点击加号 五:点击continue 六:在Ho…

IIS实现服务器反向代理用法介绍

今天给打击分享IIS实现服务器反向代理用法,感兴趣的可以学习一下!场景:本地电脑启动了两个网站地址分别为:http://127.0.0.1:8081/Sitehttp://127.0.0.1:8082/Test要实现同一个端口访问:http://127.0.0.1:8080/Sitehtt…

java if else过多_Spring Boot中如何干掉过多的if else!

需求这里虚拟一个业务需求,让大家容易理解。假设有一个订单系统,里面的一个功能是根据订单的不同类型作出不同的处理。订单实体:service接口:传统实现根据订单类型写一堆的if else:策略模式实现利用策略模式&#xff0…

硬件知识:固态硬盘相关知识介绍

目录 1、主控 2、固件算法 3、SSD的SATA接口与M.2接口 4、速度对比 今天就为大家全面科普一下固态硬盘的相关知识,让大家购买时做到心中有数,按需选择。 首先还是从SSD的结构来说起,SSD最基本的组成部件分为:主控芯片、闪存芯片、…

编码实战Web端联系人的增删改查

首先画出分析图 实现效果如图 项目下的包如图: 实体包 package com.contactSystem.entiey;public class Contact {private String Id;private String name;private String sex;private String age;private String phone;private String qq;private String email;pub…

选型java程序_Java程序员自动化指南

一、背景在Java web开发中,虽然Spring boot已经帮助我们简化了很多工作,但项目中庞杂的业务仍然需要自己去编写较多的 entity,vo,Mapper,Service, Controller 代码等,那么我们有没有什么办法来简…

网络知识:光猫光纤宽带故障排查笔记

在日常上网过程中出现的故障,很大一部分是由于线路和光猫故障引起,现简单介绍一下,如何处理这些故障。 现象一:不能上网(网络中断) 故障排查: 1、确认您的光猫信号灯是否正常: ①电源…

treeview自动从表中添加标题和列值做目录的方法2

treeview自动从表中添加标题和列值做目录的方法2,该方法是借鉴万一老师的 http://www.cnblogs.com/del/archive/2008/05/15/1114450.html 首先界面上添加treeview组件,然后在treeview的onchange事件里这样写: 因为要用到定义个过程&#xff0…

Linux常用运维命令笔记

今天给大家整理一下Linux常用的命令,希望对大家能有所帮助!MYSQL相关1、查看mysql版本status; select version()2、 mysql启动命令#01 使用 service 启动:service mysqld start (5.0版本) service mysql start (5.5.7版本) #02 使用 mysqld 脚…

电脑知识:如何将旧电脑文件迁移到新电脑中,包括操作系统

将旧电脑中的文件和操作系统全部转移到新电脑中,一般可以借助分区助手、磁盘精灵或者GHOST等磁盘工具。为了提高数据传输速度,可以将旧电脑的硬盘拆下安装到新电脑,然后使用PE工具盘引导电脑进入PE系统中,将旧电脑硬盘中的数据借助…

浏览器插件:一款解决谷歌浏览器吃内存神器插件

Chrome浏览器是大部分开发者必备的浏览器,它的主要有点有便于调试、启动快、无广告。但是谷歌浏览器也有自己的缺点,Chrome浏览器对系统内存的占用太大了,每打开一个页面都会占用系统内存。如果你的浏览器一下子打开几十个网页,不…