基于android手机的文件传输系统内容摘要:

李娜(西安电子科技大学) 翻译 机械工业出版社 Android 端 ijetty 服务器开发 百度文库 2. 文件传输系统详细设计 文件传输系统结构图 基 于 B / S 架 构 的手 持 机 传 输 功 能P C 端A n d r o i d 手 机客 户 端 服 务 器局 域 网 图 工程化综合训练报告书 16 文件传输系统结构 模块 具体功能定义如下: 模块二 Ijetty servlet 容器 : HTTP 服务和 servlet 容器协同工作,使 Jetty 成为动态的web 服务器 jetty client 组件 : 可以方便的向 web 服务器发送 HTTP 请求和处理 HTTP响应 异步 servlet: 允许在某个时刻挂起当前请求,释放被绑定的线程,然后当该请求被执行时, Jetty 会分配一个线程来继续该请求 模块一 PC 端 首页( Index): 文件传输系统首页 添加文件( Add File): 添加需传送给手机的文件 上传处理 (Uploadservlet): 处理上传功能 成功结果 (Success): 显示成功的结果 失败结果 ( exception): 发生异常的结果 HTTP 服务 : 进一步 成为 web 容器,来提供动态的 HTTP 内容 模块 三 手机 端 热点共享 : 打开手机端热点,让 PC 端接入使它们处于同一局域网内 打开 Ijetty服务器: 打开 Ijetty 服务器,按“ start”进入。 检查文件是否上传成功: 如果文件上传成功,在手机 SD 卡上能找到对应文件。 工程化综合训练报告书 17 Ijetty 服务器的安装及系统环境配置 ijetty 下载地址: 安装成功后手机显示图标 Ijetty界面 工程化综合训练报告书 18 文件传输系统各模块 网页界面模块 ? 主页模块展示及代码详解 图 文件大小控制模块 图 工程化综合训练报告书 19 图 按钮布局设置 图 表单 工程化综合训练报告书 20 图 主页 ? 上传成功页面模块展示及代码详解 图 跳转与背景图片 图 上传成功 工程化综合训练报告书 21 ? 上传失败页面模块展示及代码详解 图 跳转 与背景图片 图 上传失败 工程化综合训练报告书 22 文件传输功能代码 代码模块一:解析表单 public class UploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { final int NONE = 0。 // 状态码,表示没有特殊操作 final int DATAHEADER = 1。 // 表示下一行要读到报头信息 final int FILEDATA = 2。 // 表示下面要读的是上传文件和二进制数据 final int FIELDDATA = 3。 // 表示下面要读到表 单域的文本值 try { // 请求消息实体的总长度 (请求消息中除消息头之外的数据长度 ) int totalbytes = ()。 // 容纳请求消息实体的字节数组 byte[] b = new byte[totalbytes]。 // 请求消息类型 String contentType = ()。 String fieldname =。 // 表单域的名称 String fieldvalue =。 // 表单域的值 String filename =。 // 上传的文件名称 String boundary =。 //分界符字符串 String lastboundary =。 // 结束分界符字符串 int fileSize = 0。 // 文件长度 // 容纳表单域的名称 /值的哈希表 Hashtable formfields = new Hashtable()。 // 在消息头类型中找到分界符的定义 int pos = (boundary=)。 工程化综合训练报告书 23 if (pos != 1) { pos += boundary=.length()。 boundary = + (pos)。 // 解析出分界符 lastboundary = boundary +。 // 得到结束分界符 } int state = NONE。 // 起始状态为 NONE // 得到请求消息的数据输入流 DataInputStream in = new DataInputStream(())。 (b)。 // 根据长度,将消息实体的内容读入字节数组 b 中 ()。 // 关闭数据流 String reqcontent = new String(b)。 // 从字节数组中得到表示实体字符串 // 从字符串中得到输出缓冲流 BufferedReader reqbuf = new BufferedReader(new StringReader(reqcontent))。 // 设置循环标志 boolean flag = true。 int i = 0。 while (flag == true) { String s = ()。 if (s == lastboundary || s == null) break。 switch (state) { case NONE: if ((boundary)) { // 如果读到分界符,则表示下一行一个头信息 state = DATAHEADER。 i += 1。 } break。 case DATAHEADER: pos = (filename=)。 工程化综合训练报告书 24 // 先判断出这是一个文本表单域的头信息,还是一个上传文件的头信息 if (pos == 1) { // 如果是文本表单域的头信息,解析出表单域的名称 pos = (name=)。 pos += name=.length() + 1。 // 1 表示后面的 的占位 s = (pos)。 int l = ()。 s = (0, l1)。 fieldname。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。