java实现⽂件上传和下载
本⽂实例为⼤家分享了java实现⽂件上传和下载的具体代码,供⼤家参考,具体内容如下
⽂件的上传
upload:⽂件上传
客户端通过表单的⽂件域file 把客户端的⽂件上传保存到服务器的硬盘上
页⾯
⾸先对上传的表单有以下要求:
必须有⽂件域:input type=file
表单提交⽅式:method=post
表单的 enctype=multipart/form-data
<form method="post" action="/user/regist" enctype="multipart/form-data">
<table >
<tr>
<th>⽤户名</th>
<td><input type="text" name="username"></td>
</tr>
<tr>
<th>密码</th>
<td><input type="password" name="password"></td>
</tr>
<tr>
<th>⽤户头像</th>
<td><input type="file" name="photo"> </td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"></td>
</tr>
</table>
</form>
Servlet
1)⾸先要导⼊以下两个jar包,通过commons-fileupload实现⽂件上传
2)创建⼀个⼯⼚对象DiskFileItemFactory,在创建⼀个多部件表单解析器ServletFileUpload,构造⽅法传⼊⼯⼚对象
3)解析器解析请求对象,获得⼀个list集合,其中list集合存储的是⼀个⼀个的fileItem对象,⼀个fileItem对应⼀个组件,也就是⼀个<input>
4) 遍历集合⽤isFormField()⽅法判断是否为普通组件,然后着重处理⽂件域组件
5)获取⽂件名,并⽤getRealPath⽅法获取服务器上传⽂件所在路径,创建新⽂件夹
6)获取输⼊流和创建输出流,进⾏⽂件的读写
@WebServlet(value = "/user/regist")
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建⼀个⼯⼚对象
DiskFileItemFactory factory = new DiskFileItemFactory();
//创建⼀个多部件解析器对象
ServletFileUpload fileUpload = new ServletFileUpload(factory);
User user = new User();
FileOutputStream out=null;
try {
//⽤解析器对象解析请求,返回⼀个FileItem类型的集合
List<FileItem> list = fileUpload.parseRequest(req);
for (FileItem fileItem : list) {
/**
* FieldName());:::获取组件的name值
* Name());::::获取⽂件域的⽂件名
* Size());::::获取数据的字节个数
* String());::::获取数据的字符串
* fileItem.isFormField());:::判断是否为普通组件
*/
//判断部件是否为普通组件
if (fileItem.isFormField()) {//普通组件
//获取组件名字也就是name的值
String fieldName = FieldName();
//获取组件的值也就是value的值
String value = String("utf-8");
if ("username".equals(fieldName)) { //设置实体类的属性
user.setUsername(value);
} else if ("password".equals(fieldName)) {
user.setPassword(value);
}
} else {// ⽂件域
//获取⽂件名
String fielName = Name();
//输⼊流来读数据
InputStream in = InputStream();
//设置⽂件写出的路径,并⽤随机码来保证图⽚可以重复
String ServletContext().getRealPath("/imgs/"+ UUID.randomUUID()+fielName);
System.out.println("⽂件路径为:"+path);
File file = new File(path);
out = new FileOutputStream(file);
//利⽤commons-io-1.4.jar的IOUtils的copy⽅法直接实现⽂件的复制
user.Name());
}
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(out!=null){
out.close();
}
java创建文件}
}
}
⽂件的下载
页⾯
只需⼀个超链接,传需要下载的⽂件名,或者直接输⼊路径在浏览器
例: <a href="<c:url value='/file/download?fileName=14.jpg'/>" >狗狗1</a><br/>
Servlet
1)接收参数,获取⽂件名
2)获取imgs的路径,也就是存储⽂件的⽂件夹的路径,然后创建⽂件,传⼊该路径和⽂件名
3)创建输⼊流读取⽂件
4)设置响应头,⾸先根据⽂件名字获取⽂件的⼤类型,设置响应头Content-Type指定响应的类型;设置响应头Content-Disposition,指定⽂件以附件形式保存到本地磁盘
5)⽤响应获取输出流,读出⽂件到客户端
@WebServlet("/user/download")
public class DownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//获取要下载的⽂件名
String fileName = Parameter("fileName");
System.out.println(fileName);
//获取服务器中存储图⽚的⽂件夹的路径
String path1 = ServletContext().getRealPath("/imgs");
String path=path1+"/"+fileName;
File file = new File(path);
//创建输⼊流读⽂件
FileInputStream in = new FileInputStream(file);
//通过⽂件名字获取⽂件的⼤类型
String type = ServletContext().getMimeType(fileName);
/
/设置响应头ContentType指定响应内容的类型
response.setHeader("Content-type",type);
//设置响应头Content-Disposition 指定以附件形式保存响应的信息
response.setHeader("Content-Disposition","attachment;filename="+(de(fileName, "utf-8"))); ServletOutputStream out = OutputStream();
//实现⽂件的读写
if(in!=null){
in.close();
}
}
}
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论