Java实现上传⽂件图⽚到指定服务器⽬录
具体代码如下所⽰:
***l***
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="java.sun/xml/ns/javaee" xmlns:web="java.sun/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="java.sun/xml/ns/javaee java.sun/xm <servlet>
<servlet-name>fileUpload</servlet-name>
<servlet-class>cn.action.FileUpload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fileUpload</servlet-name>
<url-pattern>/fileUpload</url-pattern>
</servlet-mapping>
</web-app>
package cn.action;
import java.io.File;
import java.io.*;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apachemons.fileupload.FileItem;
import org.apachemons.fileupload.FileUploadException;
import org.apachemons.fileupload.disk.DiskFileItemFactory;
import org.apachemons.fileupload.servlet.ServletFileUpload;
/**
*
* @author Administrator
* ⽂件上传
* 具体步骤:
* 1)获得磁盘⽂件条⽬⼯⼚ DiskFileItemFactory 要导包
* 2)利⽤ request 获取真实路径,供临时⽂件存储,和最终⽂件存储,这两个存储位置可不同,也可相同
* 3)对 DiskFileItemFactory 对象设置⼀些属性
* 4)⾼⽔平的API⽂件上传处理 ServletFileUpload upload = new ServletFileUpload(factory);
* ⽬的是调⽤ parseRequest(request)⽅法获得 FileItem 集合list ,
*
* 5)在 FileItem 对象中获取信息,遍历,判断表单提交过来的信息是否是普通⽂本信息另做处理
* 6)
* 第⼀种. ⽤第三⽅提供的 item.write( new File(path,filename) ); 直接写到磁盘上
* 第⼆种. ⼿动处理
*
*/
public class FileUpload extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8"); //设置编码
//获得磁盘⽂件条⽬⼯⼚
DiskFileItemFactory factory = new DiskFileItemFactory();
//获取⽂件需要上传到的路径
String path = RealPath("/upload1");
// String path = "c:/upload1";
//如果没以下两⾏设置的话,上传⼤的⽂件会占⽤很多内存,
//设置暂时存放的存储室 , 这个存储室,可以和最终存储⽂件的⽬录不同
/
**
* 原理它是先存到暂时存储室,然后在真正写到对应⽬录的硬盘上,
* 按理来说当上传⼀个⽂件时,其实是上传了两份,第⼀个是以 .tem 格式的
* 然后再将其真正写到对应⽬录的硬盘上
*/
factory.setRepository(new File(path));
//设置缓存的⼤⼩,当上传⽂件的容量超过该缓存时,直接放到暂时存储室
factory.setSizeThreshold(1024*1024) ;
//⾼⽔平的API⽂件上传处理
ServletFileUpload upload = new ServletFileUpload(factory);
try {
/
/可以上传多个⽂件
List<FileItem> list = (List<FileItem>)upload.parseRequest(request);
for(FileItem item : list){
//获取表单的属性名字
String name = FieldName();
//如果获取的表单信息是普通的⽂本信息
if(item.isFormField()){
//获取⽤户具体输⼊的字符串,名字起得挺好,因为表单提交过来的是字符串类型的
String value = String() ;
request.setAttribute(name, value);
inputtypefile不上传文件}else{//对传⼊的⾮简单的字符串进⾏处理,⽐如说⼆进制的图⽚,电影这些
/
**
* 以下三步,主要获取上传⽂件的名字
*/
//获取路径名
String value = Name() ;
//索引到最后⼀个反斜杠
int start = value.lastIndexOf("\\");
//截取上传⽂件的字符串名字,加1是去掉反斜杠,
String filename = value.substring(start+1);
request.setAttribute(name, filename);
//真正写到磁盘上
/
/它抛出的异常⽤exception 捕捉
//item.write( new File(path,filename) );//第三⽅提供的
//⼿动写的
OutputStream out = new FileOutputStream(new File(path,filename));
InputStream in = InputStream() ;
int length = 0 ;
byte [] buf = new byte[1024] ;
System.out.println("获取上传⽂件的总共的容量:"+Size());
// in.read(buf) 每次读到的数据存放在 buf 数组中
while( (length = in.read(buf) ) != -1){
//在 buf 数组中取出数据写到(输出流)磁盘上
out.write(buf, 0, length);
}
in.close();
out.close();
}
}
}catch (FileUploadException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
***index.jsp***
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传⼊⼝</title>
</head>
<body>
<form action="fileUpload" enctype="multipart/form-data" method="post" >
⽤户名称:<input type="text" name="usename"> <br/>
上传图⽚:<input type="file" name="file1"><br/>
上传⽂件:<input type="file" name="file2"><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
***filedemo.jsp***
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>上传⽂件图⽚案列</title>
</head>
<body>
⽤户名称:${requestScope.usename }<br />
图⽚名称:${requestScope.file1 }<br />
⽂件名称:${requestScope.file2 }<br />
<!-- 把上传的图⽚显⽰出来 -->
<img alt="go" src="upload1/<%=(String) Attribute("file1")%> " />
</body>
</html>
总结
以上所述是⼩编给⼤家介绍的Java实现上传⽂件图⽚到指定服务器⽬录,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论