第一种文件上传方式,用到commons-fileupload.jar,commons-io.jar
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
session.setAttribute("SESSIONID",session.getId());
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> itr = items.iterator();
while(itr.hasNext()){
FileItem item=(FileItem)itr.next();
String fileName=item.getName();
if(fileName!=null){
File fullFile=new File(item.getName());
File savedFile=new File("d:/uploads",fullFile.getName());
item.write(savedFile);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
第二种文件上传方式,这里用到cos组件方式上传,需要导入cos.jarn,不过srping中的multipart包已经有了....
public ModelAndView uploadImageCoCustQuiz(HttpServletRequest request,HttpServletResponse response) throws Exception {
System.out.print("我进到上传文件的方法了!!!!");
MultipartFile mf = null;
File file = null;
String upLoadFilePath = null;
String fileName=null;
JSONObject jo = new JSONObject();
try{
final String path = "D:/uploadFile/";
final File dirPath = new File(path);
if(!dirPath.exists())
dirPath.mkdirs();
//让request能转换成multipart...对象,那么ext上传文件一定要设置 某个form.getForm().fileUpload = true或者设置
formpanel的enctype : 'multipart/form-data',
MultipartResolver resolver = new CommonsMultipartResolver();
if(resolver.isMultipart(request)){
final MultipartHttpServletRequest mhs = (MultipartHttpServletRequest) request;
//只要你前台的文本框是文件类型的,不管你有没有上传文件,后台依然有得到流,只是应该说这个流是否为无效流,如果是无效流则
jdbctemplate插入或者更新时就是插入null了..
//只要前台的文本框为文件类型,不管有没有上传文件,mf都可以得到,不会为空
mf = mhs.getFile("uploadFile");
final String uploadFileName = mf.getOriginalFilename();
//mf.getInputStream() 得到文件输入流
if(uploadFileName!=null || uploadFileName!="")
{
final String objStr = uploadFileName.substring(uploadFileName.lastIndexOf(".")).trim();
//String uploadFileNameStr = uploadFileName.substring(0,uploadFileName.indexOf(".")).trim();
fileName = "1" + objStr;
}
//fileName.trim();
upLoadFilePath = path+uploadFileName;
file = new File(upLoadFilePath);
mf.transferTo(file);
//上传文件完毕
} catch (Exception e) {
System.out.print("上传文件方法中出现异常。。。。。。。。。。。。。。。。。。。");
}
}else{
System.out.println("连文件都不是!!!");
}
jo.put("success", true);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print(jo.toString());
out.flush();
out.close();
return null;
}
cos组件的multipartRequest的8个构造方法和8个方法
在Cos组件中,MultipartRequest类主要负责文件上传的处理。MultipartRequest有8个构造函数:
1.Public MultipartRequest ( HttpServletRequest request, String saveDirectory,) throws IOException
2.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException
3.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, FileRenamePolicy policy) throws IOException
4.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding) throws IOException
5.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding, FileRenamePolicy policy) throws IOException
6.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, String encoding) throws IOException
7.Public MultipartRequest ( HttpServletRequest request, String saveDirectory) throws IOException
8.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException
前6种构造函数都是用来专门处理HTTP协议的,saveDirectory是上传文件要存储在服务器端的目录名称;maxPostSize是用来限制用户上传文件大小的,若超过maxPostSzie,会产生IOException,默认上传文件大小是1MB;encoding可以设定用何种编码方式来上传文件名称,可以解决中文问题。
MultipartRequest类工具有8种方法,利用这些方法,我们可以取得请求的相关信息:
Public Enumeration getParameterNames() 可以取得请求参数的名称
public String getParameter(String name) 此方法传回参数为name的值
public String[] getParameterValues(String name) 此方法主要用在取得当一指定参数具有多个值时,它会传回String的数组
public Enumeration getFileName() 传回所有文件输入类型的名称
public String getFilesystemNames(String name) 用此方法得到上传文件的真正的文件名,这里的name指文件输入类型的名称
public String getContentType(String name) 此方法得到上传文件的内容类型
public File getFile(String name) 此方法得到一个文件对象,代表储存在服务器上的name文件
public String getOriginalFileName(String name) 返回文件在修改政策有效之前的文件名