java 图片数据流_Java重点之小白解析--浅谈数据流形式图片上载

闲言少叙,直入主题。

/**

* @throws IOException

*

* @category 上传文档

* @Title: uploadImage

* @Description:

* @return void    返回类型

* @throws

*/

protected int uploadFile(HttpServletRequest request, HttpServletResponse response, String saveFilename) {

int size = 1024 * 1024 * 2;

try {

// 上传时生成的文件保存目录

String realSavePath = sp.makePath(saveFilename,sp.getFileSaveRootPath());

// 上传时生成的临时文件保存目录

String tempPath = this.getServletContext().getRealPath(sp.getTemp_Path());

File tmpFile = new File(tempPath);

if (!tmpFile.exists()) {

// 创建临时目录当前已处理

tmpFile.mkdir();

}

//sp.makePath(savePath);

InputStream in = new BufferedInputStream(new DataInputStream(request.getInputStream()), size);

OutputStream out = new BufferedOutputStream(new FileOutputStream(realSavePath ), size);

byte buffer[] = new byte[1024];

// 判断输入流中的数据是否已经读完的标识

int len = 0;

// 循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据

while ((len = in.read(buffer)) > 0) {

// 使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\"

// +filename)当

out.write(buffer, 0, len);

}

// 关闭输入流

in.close();

// 关闭输出流

out.close();

return 1;

} catch (IOException e) {

System.out.println("io操作异常");

e.printStackTrace();

return 0;

}

}

注:

saveFilename      :是文件名,用于存储到数据库中,便于索引文件。

sp.getFileSaveRootPath():是文件存储地址,存储地址这块遇到一些问题下面会提到。

sp.getTemp_Path())   :当文件过大时,缓存路径。

文件上传时遇到了几个问题以及解决的办法:

问题一:文件地址存储问题。

其一 以存储到相对路径中,一般都是这么搞,所谓相对路径,在这里一般是相对系统的发布路径,也就是说,如果是web项目,tomcat/ebapp文件夹,这目录下会相对存在一个与项目同名的文件夹, 存放项目发布后的资源,上传文档的路径也是以此为根目录的,但是也有人认为是以Root为根目录,对此不太明白,望各位走过路过的大神稍微指点指点。

在这里会遇到一个问题:就是每次重新编译项目,就会出现原来上传的资源消失了的现象,其实这是必然的现象,因为说是更新,其实仔细查看Tomcat的启动流程就会发现,它是先删除原来编译的项目文件,然后再重新编译现在的文件,会出现资源的消失也是必然的。由此引出了下面的解决思路。

其二 可以存储到盘中的任意路径中,这就需要用到Tomcat的一个虚拟存储技术。

所谓虚拟存储,是指将Tomcat下一个虚拟路径,映射到磁盘中的实际路径中去。

实现方式一般有两种,

方式一 tomcat安装目录下conf/servlet.xml中 标签下配置

方式二 在conf\Catalina\localhost中添加文件名为test.xml

内容为 <?xml version="1.0" encoding="UTF-8"?>

即可实现文件的上传。这是项目部署之后的实现方式

如果项目还在本地,一般都会有项目名,那么只需修改文件名为   文件名#test.xml 即可。

问题二。文件名问题。

问题三。文件名后缀问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值