昨天,看了一下课设的要求,我做的题目中还有需要上传和显示图片的功能没做,于是乎便开始进行这方面的工作了。
在做这部分的时候,我之前上课听老师说过有别人做好的架包,但是我想自己实现一下,在这之中遇到了一些问题,
1:文件上传(图片),这里我默认只支持 JPG 格式的,
这里主要是通过 :
文件输入输出流(完成文件的创建或者打开)
和
JPG对应的相关函数(完成文件的编码和传输)
FileOutputStream ot = new FileOutputStream(path); 创建一个输出流对象,给了服务器的所要存储图片的路径
FileInputStream in=new FileInputStream(ima); 为我们本地的图片创建一个输入文件流对象,ima 本地的图片路径
JPEGImageDecoder jpgCodec = JPEGCodec.createJPEGDecoder(in);
BufferedImage image = jpgCodec.decodeAsBufferedImage(); 获取译码后的buffer
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(ot);
encoder.encode(image); 完成图片的上传
in.close();
ot.close();
2:图片的显示
这部分由于我在这之前,使用的路径上有问题,所以造成了图片不能正常显示。
因为我之前使用的路径是本机的绝对路径,因为我认为只要我知道那个图片的绝对路径,
我就一定能够把图片显示出来,但是如果在其他的电脑上访问我的机器,默认也会去
那台电脑的那个绝对路径去读文件,但是那个文件并不在客户端上边的,所以,这里就必须
做一个调整。我们可以在服务器上传时,保存工程和图片文件所构成的一组路径(/工程名/文件名)
然后,我们在显示的时候,通过
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
这两句得到每个客户端访问图片的前端路径 basepath,然后 basePath + (/工程名/文件名) 就能够正确的访问图片了。。。