JSP学习日记(二) 文件上传

该博客展示了JSP实现文件上传及参数解析的代码。包含uploadfile.jsp用于选择上传文件和输入标题,uploadfile2.jsp将文件写入本地,uploadfile3.jsp通过解析临时文件获取上传内容和参数,处理文件和输入参数的上传。
 
uploadfile.jsp
============================================
<%@ page contentType="text/html;charset=utf-8" %>
<html>
<body>
 <p>选择要上传的文件:<br>
 <form action="uploadfile2.jsp" method="post" enctype="multipart/form-data">
 <!--这里必须使用post方式以及"multipart/form-data"-->
  文件:<input type=file name="inputfilefield" size="38"/><br>
  标题:<input type="text" name="title"/>   <br>
  <input type="submit" name="uploadbutton" value="upload..."/>
 </form>
 </p>
</body>
</html>
 
 
uploadfile2.jsp
============================================
<%@ page contentType="text/html;charset=utf-8" %>
<%@ page import="java.io.*"%>
<html>
<body>
 <%
 try{
  InputStream in=request.getInputStream();
  File file=new File("G:/JspExercise/File", "uploaded.txt");
  FileOutputStream o=new FileOutputStream(file);
  byte[] b=new byte[1000];
  int n;
  while( (n=in.read(b)) != -1 ){
   o.write(b, 0, n);
  }
  o.close();
  in.close();  
 }
 catch(IOException e){
   e.printStackTrace();
 }
 out.println("文件已上传。");
 %>
 <BR>标题:<%=request.getParameter("title")%>
 <BR>由于采用multiType/form-data,不能通过request.getParameter()来获得参数
 <BR>这时,各种类型的参数都统一包含在inputstream中,因而只能<a href="uploadfile3.jsp">通过解析输入流来获得参数</a>
 
</body>
</html>
 
 
uploadfile3.jsp
============================================
<%@ page contentType="text/html;charset=utf-8" %>
<%@ page import="java.io.*"%>
<html>
<body>
 <%--通过解析临时文件uploadFile来获得真正上传的内容--%>
 <%
 try{
  InputStream in=request.getInputStream();
  File dir = new File("G:/JspExercise/File");
  File f1=new File(dir, "uploaded.txt");
  RandomAccessFile random1=new RandomAccessFile(f1, "r");
  String formID = random1.readLine();
  if(formID == null){
   return ;
  }
  formID = formID.substring(formID.lastIndexOf('-')+1, formID.length());
  random1.seek(0);
  String line = random1.readLine(); 
  while(line != null && line.indexOf(formID) != -1 ){
   //处理某一个表单项
   line = random1.readLine();
   if(line != null ){
    if( line.indexOf("filename") != -1){
     //该表单项是上传的文件
     int pos = line.lastIndexOf("//");
     String fileName = line.substring(pos+1,line.length()-1);
     fileName = new String(fileName.getBytes("iso-8859-1"), "utf-8");
     File f2=new File(dir, fileName);
     RandomAccessFile random2=new RandomAccessFile(f2, "rw");
     random1.readLine();random1.readLine();          //文件指针下移两行
     long startPos = random1.getFilePointer();    //文件内容的起点
     long endPos = 0;     //文件内容的终点
     while(random1.readLine().indexOf(formID) == -1){//直到下一个表单项的起始行
      endPos = random1.getFilePointer() - 2;  //不包括回车行符
     }
     //重新创建文件
     random1.seek(startPos);
     int n;
     while(startPos < endPos){
      n=random1.readByte();
      random2.write(n);
      startPos = random1.getFilePointer();
     }
     random2.close();
     out.print("<br>上传文件:" + fileName );
     out.print("(<a href='"+ fileName +"'>查看</a>)");
     random1.seek(endPos + 2);                //指向下一个表单项的起始行
     line = random1.readLine();
    }
    else{
     //该表单项是输入的参数
     String paraName = line.substring(line.indexOf("/"")+1, line.length()-1);
     random1.readLine();              //文件指针下移一行
     StringBuffer buf = new StringBuffer();
     while( (line = random1.readLine()).indexOf(formID) == -1){
      buf.append(line);
     }
     String paraValue = new String(new String(buf).getBytes("iso-8859-1"), "utf-8");
     out.print("<br>输入参数:" + paraName + "=" + paraValue);
    }
   }
  }
  random1.close();
 }
 catch(IOException e){
   e.printStackTrace();
 }
 %>
 
</body>
</html>
物联网通信协议测试是保障各类设备间实现可靠数据交互的核心环节。在众多适用于物联网的通信协议中,MQTT(消息队列遥测传输)以其设计简洁与低能耗的优势,获得了广泛应用。为确保MQTT客户端与服务端的实现严格遵循既定标准,并具备良好的互操作性,实施系统化的测试验证至关重要。 为此,采用TTCN-3(树表结合表示法第3版)这一国际标准化测试语言构建的自动化测试框架被引入。该语言擅长表达复杂的测试逻辑与数据结构,同时保持了代码的清晰度与可维护性。基于此框架开发的MQTT协议一致性验证套件,旨在自动化地检验MQTT实现是否完全符合协议规范,并验证其与Eclipse基金会及欧洲电信标准化协会(ETSI)所发布的相关标准的兼容性。这两个组织在物联网通信领域具有广泛影响力,其标准常被视为行业重要参考。 MQTT协议本身存在多个迭代版本,例如3.1、3.1.1以及功能更为丰富的5.0版。一套完备的测试工具必须能够覆盖对这些不同版本的验证,以确保基于各版本开发的设备与应用均能满足一致的质量与可靠性要求,这对于物联网生态的长期稳定运行具有基础性意义。 本资源包内包含核心测试框架文件、一份概述性介绍文档以及一份附加资源文档。这些材料共同提供了关于测试套件功能、应用方法及可能包含的扩展工具或示例的详细信息,旨在协助用户快速理解并部署该测试解决方案。 综上所述,一个基于TTCN-3的高效自动化测试框架,为执行全面、标准的MQTT协议一致性验证提供了理想的技术路径。通过此类专业测试套件,开发人员能够有效确保其MQTT实现的规范符合性与系统兼容性,从而为构建稳定、安全的物联网通信环境奠定坚实基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值