java 文件上传工具_java 上传文件工具类

1 packagecom.newtouch.common.utils;2

3 importjava.io.File;4 importjava.io.IOException;5 importjava.text.SimpleDateFormat;6 importjava.util.ArrayList;7 importjava.util.Arrays;8 importjava.util.Date;9 importjava.util.HashMap;10 importjava.util.Iterator;11 importjava.util.List;12 importjava.util.Map;13 importjava.util.Random;14

15 importjavax.servlet.http.HttpServletRequest;16

17 importorg.apache.commons.fileupload.FileItem;18 importorg.apache.commons.fileupload.FileUploadException;19 importorg.apache.commons.fileupload.disk.DiskFileItemFactory;20 importorg.apache.commons.fileupload.servlet.ServletFileUpload;21

22 /**

23 * 文件上传工具类24 *25 *@authoryangdc26 * @date Apr 18, 201227 *28 *

29 * 
30 */

31 public classUploadUtils {32 /**

33 * 表单字段常量34 */

35 public static final String FORM_FIELDS = "form_fields";36 /**

37 * 文件域常量38 */

39 public static final String FILE_FIELDS = "file_fields";40

41 //最大文件大小

42 private long maxSize = 1000000;43 //定义允许上传的文件扩展名

44 private Map extMap = new HashMap();45 //文件保存目录相对路径

46 private String basePath = "upload";47 //文件的目录名

48 private String dirName = "images";49 //上传临时路径

50 private static final String TEMP_PATH = "/temp";51 private String tempPath = basePath +TEMP_PATH;52 //若不指定则文件名默认为 yyyyMMddHHmmss_xyz

53 privateString fileName;54

55 //文件保存目录路径

56 privateString savePath;57 //文件保存目录url

58 privateString saveUrl;59 //文件最终的url包括文件名

60 privateString fileUrl;61

62 publicUploadUtils() {63 //其中images,flashs,medias,files,对应文件夹名称,对应dirName64 //key文件夹名称65 //value该文件夹内可以上传文件的后缀名

66 extMap.put("images", "gif,jpg,jpeg,png,bmp");67 extMap.put("flashs", "swf,flv");68 extMap.put("medias", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");69 extMap.put("files", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");70 }71

72 /**

73 * 文件上传74 *75 *@paramrequest76 *@returninfos info[0] 验证文件域返回错误信息 info[1] 上传文件错误信息 info[2] savePath info[3] saveUrl info[4] fileUrl77 */

78 @SuppressWarnings("unchecked")79 publicString[] uploadFile(HttpServletRequest request) {80 String[] infos = new String[5];81 //验证

82 infos[0] = this.validateFields(request);83 //初始化表单元素

84 Map fieldsMap = new HashMap();85 if (infos[0].equals("true")) {86 fieldsMap = this.initFields(request);87 }88 //上传

89 List fiList = (List) fieldsMap.get(UploadUtils.FILE_FIELDS);90 if (fiList != null) {91 for(FileItem item : fiList) {92 infos[1] = this.saveFile(item);93 }94 infos[2] =savePath;95 infos[3] =saveUrl;96 infos[4] =fileUrl;97 }98 returninfos;99 }100

101 /**

102 * 上传验证,并初始化文件目录103 *104 *@paramrequest105 */

106 privateString validateFields(HttpServletRequest request) {107 String errorInfo = "true";108 //boolean errorFlag = true;109 //获取内容类型

110 String contentType =request.getContentType();111 int contentLength =request.getContentLength();112 //文件保存目录路径

113 savePath = request.getSession().getServletContext().getRealPath("/") + basePath + "/";114 //文件保存目录URL

115 saveUrl = request.getContextPath() + "/" + basePath + "/";116 File uploadDir = newFile(savePath);117 if (contentType == null || !contentType.startsWith("multipart")) {118 //TODO

119 System.out.println("请求不包含multipart/form-data流");120 errorInfo = "请求不包含multipart/form-data流";121 } else if (maxSize

123 System.out.println("上传文件大小超出文件最大大小");124 errorInfo = "上传文件大小超出文件最大大小[" + maxSize + "]";125 } else if (!ServletFileUpload.isMultipartContent(request)) {126 //TODO

127 errorInfo = "请选择文件";128 } else if (!uploadDir.isDirectory()) {//检查目录129 //TODO

130 errorInfo = "上传目录[" + savePath + "]不存在";131 } else if (!uploadDir.canWrite()) {132 //TODO

133 errorInfo = "上传目录[" + savePath + "]没有写权限";134 } else if (!extMap.containsKey(dirName)) {135 //TODO

136 errorInfo = "目录名不正确";137 } else{138 //.../basePath/dirName/139 //创建文件夹

140 savePath += dirName + "/";141 saveUrl += dirName + "/";142 File saveDirFile = newFile(savePath);143 if (!saveDirFile.exists()) {144 saveDirFile.mkdirs();145 }146 //.../basePath/dirName/yyyyMMdd/

147 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");148 String ymd = sdf.format(newDate());149 savePath += ymd + "/";150 saveUrl += ymd + "/";151 File dirFile = newFile(savePath);152 if (!dirFile.exists()) {153 dirFile.mkdirs();154 }155

156 //获取上传临时路径

157 tempPath = request.getSession().getServletContext().getRealPath("/") + tempPath + "/";158 File file = newFile(tempPath);159 if (!file.exists()) {160 file.mkdirs();161 }162 }163

164 returnerrorInfo;165 }166

167 /**

168 * 处理上传内容169 *170 *@paramrequest171 *@parammaxSize172 *@return

173 */

174 //@SuppressWarnings("unchecked")

175 private MapinitFields(HttpServletRequest request) {176

177 //存储表单字段和非表单字段

178 Map map = new HashMap();179

180 //第一步:判断request

181 boolean isMultipart =ServletFileUpload.isMultipartContent(request);182 //第二步:解析request

183 if(isMultipart) {184 //Create a factory for disk-based file items

185 DiskFileItemFactory factory = newDiskFileItemFactory();186

187 //阀值,超过这个值才会写到临时目录,否则在内存中

188 factory.setSizeThreshold(1024 * 1024 * 10);189 factory.setRepository(newFile(tempPath));190

191 //Create a new file upload handler

192 ServletFileUpload upload = newServletFileUpload(factory);193

194 upload.setHeaderEncoding("UTF-8");195

196 //最大上传限制

197 upload.setSizeMax(maxSize);198

199 /*FileItem*/

200 List items = null;201 //Parse the request

202 try{203 items =upload.parseRequest(request);204 } catch(FileUploadException e) {205 //TODO Auto-generated catch block

206 e.printStackTrace();207 }208

209 //第3步:处理uploaded items

210 if (items != null && items.size() > 0) {211 Iterator iter =items.iterator();212 //文件域对象

213 List list = new ArrayList();214 //表单字段

215 Map fields = new HashMap();216 while(iter.hasNext()) {217 FileItem item =iter.next();218 //处理所有表单元素和文件域表单元素

219 if (item.isFormField()) { //表单元素

220 String name =item.getFieldName();221 String value =item.getString();222 fields.put(name, value);223 } else { //文件域表单元素

224 list.add(item);225 }226 }227 map.put(FORM_FIELDS, fields);228 map.put(FILE_FIELDS, list);229 }230 }231 returnmap;232 }233

234 /**

235 * 保存文件236 *237 *@paramobj238 * 要上传的文件域239 *@paramfile240 *@return

241 */

242 privateString saveFile(FileItem item) {243 String error = "true";244 String fileName =item.getName();245 String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();246

247 if (item.getSize() > maxSize) { //检查文件大小248 //TODO

249 error = "上传文件大小超过限制";250 } else if (!Arrays. asList(extMap.get(dirName).split(",")).contains(fileExt)) {//检查扩展名

251 error = "上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。";252 } else{253 String newFileName;254 if ("".equals(fileName.trim())) {255 SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");256 newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." +fileExt;257 } else{258 newFileName = fileName + "." +fileExt;259 }260 //.../basePath/dirName/yyyyMMdd/yyyyMMddHHmmss_xxx.xxx

261 fileUrl = saveUrl +newFileName;262 try{263 File uploadedFile = newFile(savePath, newFileName);264

265 item.write(uploadedFile);266

267 /*

268 * FileOutputStream fos = new FileOutputStream(uploadFile); // 文件全在内存中 if (item.isInMemory()) { fos.write(item.get()); } else { InputStream is = item.getInputStream(); byte[] buffer =269 * new byte[1024]; int len; while ((len = is.read(buffer)) > 0) { fos.write(buffer, 0, len); } is.close(); } fos.close(); item.delete();270 */

271 } catch(IOException e) {272 e.printStackTrace();273 System.out.println("上传失败了!!!");274 } catch(Exception e) {275 e.printStackTrace();276 }277 }278 returnerror;279 }280

281 /************************get/set方法**********************************/

282

283 publicString getSavePath() {284 returnsavePath;285 }286

287 publicString getSaveUrl() {288 returnsaveUrl;289 }290

291 public longgetMaxSize() {292 returnmaxSize;293 }294

295 public void setMaxSize(longmaxSize) {296 this.maxSize =maxSize;297 }298

299 public MapgetExtMap() {300 returnextMap;301 }302

303 public void setExtMap(MapextMap) {304 this.extMap =extMap;305 }306

307 publicString getBasePath() {308 returnbasePath;309 }310

311 public voidsetBasePath(String basePath) {312 this.basePath =basePath;313 tempPath = basePath +TEMP_PATH;314 }315

316 publicString getDirName() {317 returndirName;318 }319

320 public voidsetDirName(String dirName) {321 this.dirName =dirName;322 }323

324 publicString getTempPath() {325 returntempPath;326 }327

328 public voidsetTempPath(String tempPath) {329 this.tempPath =tempPath;330 }331

332 publicString getFileUrl() {333 returnfileUrl;334 }335

336 publicString getFileName() {337 returnfileName;338 }339

340 public voidsetFileName(String fileName) {341 this.fileName =fileName;342 }343

344 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值