现代软件工程第六次作业
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了现代软件工程第六次作业相关的知识,希望对你有一定的参考价值。
项目中关于实现文件上传功能的总结:
1. 环境搭建
建立web工程过程省略,仅需在工程中添加如下两个jar包:
commons-fileupload-1.2.1.jar
commons-io-2.0.jar 资源可在网上下载
2. 前段准备
<form action="uploadServlet" method="post" enctype="multipart/form-data"> FileName:<input type="text" name="filename" accept="image/gif,image/jpeg,image/png"> File:<input type="file" name="file"/> <input type="submit" value="Submit"/> </form>
注意:I. 表单提交方式为post
II. 使用 file 的表单域: <input type="file" name="file" accept="image/gif,image/jpeg,image/png"/> accept可以限制上传文件类型
III. 使用 multipart/form-data 的请求编码方式;数据将以二进制形式传输
3. 服务器端准备
创建UploadServletU用于提供服务
关键代码如下:
注意:由于表单是以二进制形式进行传输,在服务端可能会出现乱码。本人亲测:使用String fieldValue = item.getString("utf-8");可有效解决
文本域中文乱码问题。
//1. 得到FileItem的集合 DiskFileItemFactory factory = new DiskFileItemFactory(); //设置内存中最多可以存放的上传文件的大小, 若超出则把文件写到一个临时文件夹中. 以 byte 为单位 factory.setSizeThreshold(1024 * 500); //设置那个临时文件夹 File tempDirectory = new File("/resources/tempDirectory"); factory.setRepository(tempDirectory); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("utf-8"); //设置上传文件的总的大小. 也可以设置单个文件的大小. upload.setSizeMax(1024 * 1024 * 5); InputStream in = null; OutputStream out = null; // 解析request try { List<FileItem> /* FileItem */ items = upload.parseRequest(request); //2. 遍历FileItem集合 若是表单域 则打印信息 否则保存在磁盘上 for (FileItem item : items) { if (item.isFormField()) { String fieldName = item.getFieldName(); String fieldValue = item.getString("utf-8"); System.out.println(fieldName+": " +fieldValue); } else { String fieldName = item.getFieldName(); String fileName = item.getName(); String contentType = item.getContentType(); long sizeInBytes = item.getSize(); //判断表单域名是否为img if (fieldName.equals("img")) { //判断是否为图片类型 if (contentType.equals("image/png") || contentType.equals("image/jpeg") || contentType.equals("image/gif")) { //判断图片是否超过5M if (sizeInBytes <= 5 * 1024 * 1024) { in = item.getInputStream(); byte[] buffer = new byte[1024]; int len = 0; fileName = System.currentTimeMillis() + fileName; img = fileName; fileName = this.getServletContext().getRealPath("/") + "resources\\imgs\\" + fileName; System.out.println(fileName); out = new FileOutputStream(fileName); while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } } } } } } } catch (FileUploadException e) { e.printStackTrace(); } finally { if (out != null) { out.close(); } if (in != null) { in.close(); } }
以上是关于现代软件工程第六次作业的主要内容,如果未能解决你的问题,请参考以下文章