服务器接受客户端图片
2015-12-13 12:37
309 查看
写一个服务器接受客户端的图片然后保存在数据库的实例,不知道怎么弄,结果还是基础不够牢靠,对http请求抓包,看了看HTTP请求的信息,感觉一下子明白了很多。现在还望大家分享一下,希望能有帮助。
这是jsp的上传图片的表单,代码是考过来的,为了测试需要。
当然要有对应的Servlet,但是我们先抓包看看他发送的是什么。
抓包的结果如下图:
看看上面的请求的头,现在我们一一分析:
Accept:浏览器可以处理的类型。
Accept-Encoding:浏览器发给服务器告诉服务器自己可以支持的类型
Cache-Control:制定请求和相应遵循的缓存机制
Content-Type:multipart/form-data是文件请求的标识
主要我们介绍的是下面的Request Payload
------WebKitFormBoundaryVcgWIn0xGWgXTsCe:使用来分割表单请求内容的,一个表单的请求内容大致在HTTP中显示的分为两个部分:
Content-Disposition:显示了表单信息,表单的名称,表单传送的文件的名称
Content-Type:表单传送的文件的类型。
剩下的就是需要上传的二进制文件了
知道了这些东西,我们应当知道fileupload这个jar中大概只是怎样实现文件的上传了吧。解析HTTP头信息然后进行判断,封装,队得到的流进行读取写入操作。
fileupload中的FileItem就是对HTTP中的Request Payload进行封装的结果,它对应的方法也是取其中的信息。
下面附上Servlet的代码:
这是jsp的上传图片的表单,代码是考过来的,为了测试需要。
<html> <head> <title>File Uploading Form</title> </head> <body> <h3>File Upload:</h3> Select a file to upload: <br /> <form action="servlet/AcceptFileServlet" method="post" enctype="multipart/form-data"> <input type="file" name="image" size="50" /> <br /> <input type="submit" value="Upload File" /> </form> </body> </html>
当然要有对应的Servlet,但是我们先抓包看看他发送的是什么。
抓包的结果如下图:
看看上面的请求的头,现在我们一一分析:
Accept:浏览器可以处理的类型。
Accept-Encoding:浏览器发给服务器告诉服务器自己可以支持的类型
Cache-Control:制定请求和相应遵循的缓存机制
Content-Type:multipart/form-data是文件请求的标识
主要我们介绍的是下面的Request Payload
------WebKitFormBoundaryVcgWIn0xGWgXTsCe:使用来分割表单请求内容的,一个表单的请求内容大致在HTTP中显示的分为两个部分:
Content-Disposition:显示了表单信息,表单的名称,表单传送的文件的名称
Content-Type:表单传送的文件的类型。
剩下的就是需要上传的二进制文件了
知道了这些东西,我们应当知道fileupload这个jar中大概只是怎样实现文件的上传了吧。解析HTTP头信息然后进行判断,封装,队得到的流进行读取写入操作。
fileupload中的FileItem就是对HTTP中的Request Payload进行封装的结果,它对应的方法也是取其中的信息。
下面附上Servlet的代码:
DiskFileItemFactory factory = new DiskFileItemFactory(); //生成临时文件的据对路径 String tempPath = getServletContext().getRealPath("/temp"); String photoPath = getServletContext().getRealPath("/photo"); System.out.println(photoPath); //超过5M数用临时文件来保存而不是保存在内存中 factory.setSizeThreshold(1024*1024*5); //用于临时存储文件 factory.setRepository(new File(tempPath)); //上传文件的高级类 ServletFileUpload fileUpload = new ServletFileUpload(factory); try { //封装HTTP中的主体内容 List<FileItem> list = fileUpload.parseRequest(request); for (FileItem fileItem : list) { //如果得到头信息是文件类型的话 if(fileItem.getContentType().equals("image/png")){ String filename = fileItem.getName(); try { //将文件主体写进创建的文件中 fileItem.write(new File(photoPath)); System.out.println("yes"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //如果不是文件类型的话 else{ System.out.println("no"); } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); }
相关文章推荐
- 手把手入门神经网络系列(2)_74行代码实现手写数字识别
- Android开源项目:捕鱼达人游戏源代码
- linux Cent OS6.5 安装nodeJS(分分钟搞定)
- 如何安全退出已调用多个Activity的Application?
- unity C#模板
- hdu 2045 不容易系列之(3)—— LELE的RPG难题
- Hadoop伪分布集群安装
- HDU5595
- POJ 2262 筛素法
- ARRAYLIST VECTOR LINKEDLIST 区别与用法
- 7、树莓派编程;gpio编程;led闪烁
- 由浅入深了解Thrift之微服务化应用架构
- leetcode之Binary Tree Right Side View
- 常量-基本概念
- DOM的对象属性
- Linux文件系统实现
- 设计模式之适配器模式
- MongoDB简介与安装(ubuntu)
- [Python]xml.etree.ElementTree处理xml文档
- window.setTimeout() 和window.setInterval() 使用说明