上传本地文件到服务器上
上传文件到服务器上的方法:
1:使用commons-fileupload代码如下:
boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(10*1024); // 设置上传缓冲大小(10K) factory.setRepository(uploadTempDir); // 设置上传临时存放文件夹(文件尺寸大于上传缓存容量) ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(20*1024*1024); // 设置上传文件允许的最大尺寸(20M) List items = null; // 解析上传请求并判断是否超出允许上传的最大尺寸 try { items = upload.parseRequest(request); } catch (FileSizeLimitExceededException e) { // 如果超出允许上传的最大尺寸 e.printStackTrace(); logger.error(ExceptionUtil.getStackTraceMessage(e)); uploadResult.put("success", new Boolean(false)); uploadResult.put("errorMessage", "文件大小超过20MB"); return uploadResult; } Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (!item.isFormField()) { originalFileName = item.getName(); // 如果文件域为空或者文件大小为零则进入下次循环 if (StringUtils.isBlank(originalFileName) || item.getSize() == 0) { continue; } // 获取原始文件名称 originalFileName = StringUtils.trimToEmpty(StringUtils.substring(originalFileName, StringUtils.lastIndexOf(originalFileName, "\\") + 1)); // 获取原始文件后缀 fileExt = StringUtils.lowerCase(StringUtils.trimToEmpty(StringUtils.substring(originalFileName, StringUtils.lastIndexOf(originalFileName, ".")))); // 生成文件在服务器上实际存储名称 realFileNameAtServer = DateUtil.getDate("yyyyMMddHHmmssSSS") + fileExt; // 生成文件在服务器上实际存储位置 realFilePath = StringUtils.trimToEmpty(realFilePath) + "/" + realFileNameAtServer; // 读取上传文件并保存在服务器指定目录中 int readbyte = -1; // 每次实际读入的字节数 byte[] buff = new byte[1024]; // 存储每次读取的数据 BufferedInputStream bis = null; // 缓存输入流 BufferedOutputStream bos = null; // 缓存输出流 try { bis = new BufferedInputStream(item.getInputStream(), buff.length); bos = new BufferedOutputStream(new FileOutputStream(new File(realFilePath))); while((readbyte = bis.read(buff, 0, buff.length)) > -1) { bos.write(buff, 0, readbyte); } bos.flush(); } catch(IOException ioe) { ioe.printStackTrace(); logger.error(ExceptionUtil.getStackTraceMessage(ioe)); uploadResult.put("success", new Boolean(false)); uploadResult.put("errorMessage", "上传文件失败"); return uploadResult; } catch(Exception e) { e.printStackTrace(); logger.error(ExceptionUtil.getStackTraceMessage(e)); uploadResult.put("success", new Boolean(false)); uploadResult.put("errorMessage", "上传文件失败"); return uploadResult; } finally { try { // 关闭输出流 if(bos != null) { bos.close(); } // 关闭输入流 if(bis != null) { bis.close(); } } catch(IOException ioe) { ioe.printStackTrace(); logger.error(ExceptionUtil.getStackTraceMessage(ioe)); } } } } }