项目需求,需要在板子上写一个mini的web项目,由于空间的有限(大概4M)并且项目中有文件上传的功能,所以就选择用servlet实现.

大体步骤就是:  解析request头信息    获取数据流  输入到指定目录 , 但实现的功能有个很严重的缺陷,就是全部将数据流读出来,没有缓存.

导致服务器内存爆满,没有办法读取大的数据流,所以也就放弃了用这种方法实现.具体的方法如下,如有更好的办法,请大家指点一下.

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.StringReader;

import java.util.Iterator;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.meeboss.meestorage.bean.MeeFile;

/**

* 文件操作副助类

*

*/

public class FileUtil {

/**

* 上传文件到指定目录 并返回文件信息(文件名,大小)

*

* @param request

* @return

*/

public static MeeFile uploadFileToDest1(HttpServletRequest request,

String dest) {

final int NONE = 0;

final int DATAHEADER = 1;

final int FILEDATA = 2;

final int FIELDDATA = 3;

// 将请求消息的实体送到b变量中

int TotalBytes = request.getContentLength();

byte[] b = new byte[TotalBytes];

String contentType = request.getContentType();// 请求消息类型

String filename = ""; // 文件名

String boundary = ""; // 分界符

String lastboundary = ""; // 结束符

int filesize = 0; // 文件长度

int pos = contentType.indexOf("boundary=");

if (pos != -1) {// 取得分界符和结束符

pos += "boundary=".length();

boundary = "--" + contentType.substring(pos);

lastboundary = boundary + "--";

}

int state = NONE;

// 得到数据输入流reqbuf

try {

DataInputStream in = new DataInputStream(request.getInputStream());

in.readFully(b);

in.close();

String reqContent = new String(b, "UTF-8");

BufferedReader reqbuf = new BufferedReader(new StringReader(

reqContent));

boolean flag = true;

while (flag == true) {

String s = reqbuf.readLine();

if ((s == lastboundary) || (s == null))

break;

switch (state) {

case NONE:

if (s.startsWith(boundary)) {

state = DATAHEADER;

}

break;

case DATAHEADER:

pos = s.indexOf("filename=");

if (pos == -1) {// 将表单域的名字解析出来

pos = s.indexOf("name=");

pos += "name=".length() + 1;

s = s.substring(pos);

int l = s.length();

s = s.substring(0, l - 1);

state = FIELDDATA;

} else {// 将文件名解析出来

String temp = s;

pos = s.indexOf("filename=");

pos += "filename=".length() + 1;

s = s.substring(pos);

int l = s.length();

s = s.substring(0, l - 1);

pos = s.lastIndexOf("\\");

s = s.substring(pos + 1);

filename = s;

// 从字节数组中取出文件数组

pos = byteIndexOf(b, temp, 0);

b = subBytes(b, pos + temp.getBytes().length + 2,

b.length);// 去掉前面的部分

s = reqbuf.readLine();

b = subBytes(b, s.getBytes().length + 4, b.length);

pos = byteIndexOf(b, boundary, 0);

b = subBytes(b, 0, pos - 1);

File f = new File(dest, filename); // 写入文件

DataOutputStream fileout = new DataOutputStream(

new FileOutputStream(f));

fileout.write(b, 0, b.length - 1);

filesize = b.length - 1;

state = FILEDATA;

}

break;

case FIELDDATA:

s = reqbuf.readLine();

state = NONE;

break;

case FILEDATA:

while ((!s.startsWith(boundary))

&& (!s.startsWith(lastboundary))) {

s = reqbuf.readLine();

if (s.startsWith(boundary)) {

state = DATAHEADER;

break;

}

}

break;

}

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

// 指定输出类型

MeeFile meeFile = new MeeFile();

meeFile.setName(filename);

meeFile.setLength(String.valueOf(filesize));

return meeFile;

}

/**

* 字节数组中的INDEXOF函数,与STRING类中的INDEXOF类似

*

* @param b

* @param s

* @param start

* @return

*/

private static int byteIndexOf(byte[] b, String s, int start) {

return byteIndexOf(b, s.getBytes(), start);

}

/**

* 字节数组中的INDEXOF函数,与STRING类中的INDEXOF类似

*

* @param b

* @param s

* @param start

* @return

*/

private static int byteIndexOf(byte[] b, byte[] s, int start) {

int i;

if (s.length == 0) {

return 0;

linux 传输文件stpf,在Linux下搭建 miniGUI mStudio环境...-linux 全面剖析ps命令-纯Servlet实现文件上传_169IT.COM...相关推荐

  1. 在Linux下搭建 miniGUI mStudio环境

    嵌入式环境搭建准备工作 Linux操作系统:ubuntu 8.04 准备好mStudio 安装文件和运行mStudio的第三方软件 在Eclipse官方网站http://www.eclipse.org ...

  2. Linux 下搭建 Scala 开发环境

    在实际开发中,我们的项目是部署到 linux,因此,我们需要在 Linux 下搭建 scala 的环境. 具体的步骤如下: 下载对应的 scala 的安装软件.scala-2.11.8.tgz 通过远 ...

  3. linux下搭建python机器学习环境

    前言 在 linux 下搭建 python 机器学习环境还是比较容易的,考虑到包依赖的问题,最好建立一个虚拟环境作为机器学习工作环境,在建立的虚拟环境中,再安装各种需要的包,主要有以下6个(这是看这个 ...

  4. Ubuntu下搭建MPI并行计算环境

    Ubuntu下搭建MPI并行计算环境 [日期:2012-10-10] 来源:Linux社区 作者:hs794502825 [字体:大 中 小] 在这里面可以选择一个合适的openmpi安装包,此处我选 ...

  5. Windows下搭建ESP-IDF开发环境,适合ESP32/S2/C3/S3系列模组二次开发

    前言 本教程适用于以下两种用户: ①无Linux环境搭建经验或搭建Linux开发环境不成功: ②使用安信可windows一体化环境IDE V1.5开发环境搭建不成功: 本教程提供了windows下搭建 ...

  6. ubuntu下搭建android开发环境(转载)

    在ubuntu下搭建android开发环境,准备学习一下android开发. 1.安装JDK        首先到oracle的官网上下载linux版本的JDK(网址为:http://www.orac ...

  7. Windows10 下搭建汇编语言开发环境( 利用 DOSBOX 和 MASM32 )

    Windows10下搭建汇编语言开发环境(利用DOSBOX和MASM32):https://www.cnblogs.com/zyever/p/7919007.html 如何在win10 64位下搭载汇 ...

  8. iis7 mysql_windows 7 下搭建php开发环境(windows7+IIS7+php+mysql)

    首先需要说明的是,基于IIS v6.0/v7.0(2008),可以支持的脚本相当完整,不仅支持Linux无法支持的asp/asp.net,还可以安装php.mysql.zend实现php环境.同时,利 ...

  9. 乐鑫Esp32学习之旅② 巧用eclipes编辑器,官方教程在Windows下搭建esp32开发环境,打印 “Hello World”。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

最新文章

  1. 智办事:高效的目标管理,让企业战略目标得以实现
  2. 算法-链表-给定一个数小于该值的在左边等于在中间大于的在右边
  3. 以太坊白皮书_区块链60讲第33集~什么是以太坊?
  4. 一场开源数据库的精酿啤酒节,会有多少种味道?
  5. plsql如何连接oracle11g_64位win7 plsql连不上oracle11gr2 64位—plsql连接配置
  6. rank() over,dense_rank(),row_number() 的区别
  7. Windows 下,使用 Pycharm + Anaconda(NumPy,SciPy 等集成包)的环境配置
  8. oracle 使从表中随机取出一行记录数据
  9. 分块查询 缓解内存开销
  10. 使用System Center Operations Manager监视Exchange 2007客户端连通性(二)
  11. map容器中删除一个元素(value)
  12. 《西线无战事》:合上书的那一刻:只想痛哭
  13. 微信支付将推双面屏;库克谈收购英特尔基带业务;Chrome 76 稳定版发布 | 极客头条...
  14. 手机能打开的表白代码_不是程序员都能学会的5个表白代码,一学就会,附源码...
  15. 英语听力学习方法,转自一牛人的博客
  16. 2016西安教师职称计算机考试,2016年教师职称计算机考试题库.doc
  17. Verilog 层次化文件设计——彩灯控制器
  18. 恒生UFX交易接口基本介绍
  19. puppeteer学习(三)——抓取“相关搜索”关键词搜索豆瓣图书榜
  20. G.1用python进行精细中文分句(基于正则表达式),HarvestText:文本挖掘和预处理工具

热门文章

  1. 惠民计算机学校,惠民县职业中等专业学校
  2. 你眼中的罗振宇和罗辑思维?
  3. 制作Android开机动画 bootanimation.zip
  4. 扬州大学广陵学院计算机科学与技术女生多吗,超激动!萌新们纷纷晒出与扬大录取通知书合照...
  5. C语言 统计一篇英文短文中单词的个数
  6. 【会议征稿|SPIE独立出版|往届已检索】第二届人工智能、虚拟现实与可视化国际学术会议(AIVRV 2022)
  7. 成都Java开发已经饱和了?
  8. 三面阿里,有惊无险成功拿到offer定级P7,只能说是真的难
  9. MATLAB的figure文件保存成高清图片的技巧01
  10. 交互设计师需要从什么做起?