Servlet实现文件的上传
<!-- 上传文件不能够像提交文本信息一样,因为上传文件用到的是2进制的上传方式,所以要设置enctype="multipart/form-data"
而且在服务器端也要引入commons-fileupload.jar文件,-->
客户端:
<form action="/ServletTest/servlet/UploadFile.jsp" method="post" enctype="multipart/form-data">
<div align="center">
<fieldset style="width:80%;">
<legend>上传文件的案例</legend><br/>
<div>
<div align="left">上传文件</div>
<div align="right">
<input type="file" name="file1">
</div>
</div>
<div>
<input type="submit" name="sub" value="提 交">
</div>
</fieldset>
</div>
</form>
服务器端:
//声明一个file
File file = null;
//声明解析request的对象,来源于commons-fileupload.jar包中
DiskFileUpload diskFileUpload = new DiskFileUpload();
try {
//解析reqeust对象
List<FileItem> list = diskFileUpload.parseRequest(request);
//由于只是上传了一个文件,在此就不遍历了
FileItem f = list.get(0);
//,得到文件名
String filename = new String(f.getName().getBytes(),"utf-8");
//赋值文件,注意后面的123.jpg,在这里我是写死的。在实际情况中用filename即可
file = new File(this.getServletContext().getRealPath("attachment"),"123.jpg");
//创建文件夹
file.getParentFile().mkdir();
//创建新文件
file.createNewFile();
//得到文件的输入流
InputStream is = f.getInputStream();
//得到文件输出流
OutputStream os = new FileOutputStream(file);
//字节缓存
byte[] bys = new byte[1024];
//真正的文件长度
int len = 0;
//将文件流写入到指定的文件中
while((len = is.read(bys)) > -1){
os.write(bys, 0, len);
}
System.out.println("已经保存文件到:"+file.getAbsolutePath());