文件上传1-part文件

文件(图片)的上传方法

首先创建一个servlet用来获取从前端(form表单或者其它方法)传过来的数据,我这里用到人员信息的提交,使用的是form表单。

前端代码form

<form method="post" class="form-x" encType="multipart/form-data" action="people.do">

<div class="form-group">

<div class="label">

<label>姓名:</label>

</div>

<div class="field">

<input type="text" class="input w50" name="name" data-validate="required:请输入姓名" />

<div class="tips"></div>

</div>

</div>

<div class="form-group">

<div class="label">

<label>性别:</label>

</div>

<div class="field">

<input type="text" class="input w50" name="sex" data-validate="required:请输入性别" />

<div class="tips"></div>

</div>

</div>

<div class="form-group">

<div class="label">

<label>年龄:</label>

</div>

<div class="field">

<input type="text" class="input w50" name="age" data-validate="required:请输入年龄" />

<div class="tips"></div>

</div>

</div>

<div class="form-group">

<div class="label">

<label>部门:</label>

</div>

<div class="field">

<input type="text" class="input w50" name="depart" data-validate="required:请输入部门" />

<div class="tips"></div>

</div>

</div>

<div class="form-group">

<div class="label">

<label>手机号码:</label>

</div>

<div class="field">

<input type="text" class="input w50" name="phone" data-validate="required:请输入手机号码" />

<div class="tips"></div>

</div>

</div>

<div class="form-group">

<div class="label">

<label>email:</label>

</div>

<div class="field">

<input type="text" class="input w50" name="email" data-validate="required:请输入email" />

<div class="tips"></div>

</div>

</div>

<div class="form-group">

<div class="label">

<label>图片:</label>

</div>

<div class="field">

<input type="file" id="url1" name="img" class="input tips button bg-blue margin-left" data-toggle="hover" data-place="right" data-image="" />

<div class="tipss">图片尺寸:1920*500</div>

</div>

</div>

<div class="form-group">

<div class="label">

<label></label>

</div>

<div class="field">

<button class="button bg-main icon-check-square-o" type="submit"> 提交</button>

</div>

</div>

</form>

servlet代码

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.MultipartConfig;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.Part;

import com.tf.management.dao.PeopleImp;

import com.tf.management.entity.Person;

import com.tf.management.util.UploadImg;

@WebServlet("/people.do")

@MultipartConfig//注解,这里必须用到多部分上传,因为文件太大,一次传递不完

public class PeopleServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//从前端获取数据

String name = req.getParameter("name");

String age = req.getParameter("age");

String sex = req.getParameter("sex");

String depart = req.getParameter("depart");

String phone = req.getParameter("phone");

String email = req.getParameter("email");

//获取图片

Part part = req.getPart("img");

String path = req.getServletContext().getRealPath("img");//获取图片的路径

String icon = new UploadImg().uploadImg(part, path);//调用上传图片的方法,返回一个相对路径

//处理数据 把数据封装成people对象

Person person = new Person();

person.setName(name);

person.setAge(Integer.valueOf(age));

person.setSex(sex);

person.setDepart(depart);

person.setEmail(email);

person.setPhone(phone);

person.setIcon(icon);

//插入到数据库中

new PeopleImp().update(person);

//跳转到adv.html页面

req.getRequestDispatcher("adv1.html").forward(req, resp);

}

}

上传图片方法

import java.io.File;

import java.io.IOException;

import javax.servlet.http.Part;

public class UploadImg {

//上传文件

public String uploadImg(Part part,String path) {

//2.3通过文件的content-type,判断文件的类型,不是图片类型不让上传

String type=part.getContentType();

if (!(type.contains("png")||type.contains("jpeg")||type.contains("gif"))) {

//返回前端文件必须是指定格式

return null;

}

//2.4判断文件大小,可以限制图片的大小

if (part.getSize()>256*768) {

return null;//如果太小,上传不上去

}

//2.5将文件进行拼接写入到指定文件

//处理字符串,获取上传的文件名

String content=part.getHeader("content-disposition");//获取文件绝对路径

String filename=content.substring(content.lastIndexOf("=\"")+2,content.lastIndexOf("\""));//截取文件名称

String newFile="img/"+filename;

File file=new File(path);

if (!file.exists()) {//不存在当前文件,新建一个

file.mkdir();

}

filename=path+File.separatorChar+filename;//File.separetorChar是反斜杠,这里在windows和苹果系统都适用

//2.6将文件写到指定位置

try {

part.write(filename);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return newFile;//返回文件路径

}

}

---------------------

总结

文件上传的时候一定要记住使用注解,@MultipartConfig多部分上传一定不能少。文件存取到数据库中是相对路径,数据库会根据相对路径在把图片显示在前端。主要注意的是相对路径的拼接。

文件上传1

推荐阅读