现代软件工程第六次作业

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();
  }
}

 

    

以上是关于现代软件工程第六次作业的主要内容,如果未能解决你的问题,请参考以下文章

2017年软件工程第六次作业-每周例行报告

2017秋-软件工程第六次作业-第七周例行总结

软件工程-东北师大站-第六次作业PSP

软件工程第六次作业——例行报告

17秋 软件工程 第六次作业 Beta冲刺

软件测试-第六次作业