java代码post图片(二进制文件)到服务器,servlet接收
2016-09-28 11:03
513 查看
前言:
本文重点介绍客户端用java代码怎么写,以及服务器端servlet代码怎么写,置于如何配置请参考另一篇博文:
链接:java代码post表单数据到服务器,servlet接收处理
概述:
post图片其实就是post二进制文件,不同于post表单数据。表单数据以键值对(Key-Value)的形式,客户端放在Map集合当中,利用PrintWriter,打印输出到服务器上,然后服务器端,使用request的getParameter()来获取对应值。
而二进制文件其实也是好post的,思想就是,在客户端,先从磁盘上读取到要传送的文件,本文就以图片为例了,然后获取一个输出流:
URL url = new URL(“http://localhost:8080/test1/Upload_image”);
URLConnection connection = url.openConnection();
BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream())
然后利用BufferedOutputStream 的方法,写入数据到流里面给服务器端就行。
然后服务器端是利用的tomcat提供的jar包,其中常用包javax.servlet 下面三张图摘自《java8编程参考官方教程》第9版
![](https://img-blog.csdn.net/20160928104433305)
![](https://img-blog.csdn.net/20160928104510945)
从中我们可以看出有一个ServletInputStream这个类,查API文档javaEE api文档下载:点击下载java_ee_api
可以知道这个类能得到一个来自客户端的流,它往往使用HttpServletRequest request; request.getInputStream()这个方法来得到,然后从ServletInputStream这个类有一个方法:
![](https://img-blog.csdn.net/20160928104929140)
所以我们可以利用这个方法来读取客户端传上来的流数据,然后再原封不动写出去就ok了,下面上代码:
1、客户端
2、服务器端
最后在web.xml中配置好即可:
总结:
上传图片归根结底其实就是使用了IO流的概念,把二进制数据当成流来读写,即能达到传输的目的。之前查到网上有一些现有的框架、或者是Apache提供的包,捣鼓半天没弄出来,还是英语水平太差了,因为那些包并不常用,所以只有官网上的api文档,很多方法不知道怎么用,后来自己捣鼓出这种直接以流的方式来传输,感觉也还是可以。
本文重点介绍客户端用java代码怎么写,以及服务器端servlet代码怎么写,置于如何配置请参考另一篇博文:
链接:java代码post表单数据到服务器,servlet接收处理
概述:
post图片其实就是post二进制文件,不同于post表单数据。表单数据以键值对(Key-Value)的形式,客户端放在Map集合当中,利用PrintWriter,打印输出到服务器上,然后服务器端,使用request的getParameter()来获取对应值。
而二进制文件其实也是好post的,思想就是,在客户端,先从磁盘上读取到要传送的文件,本文就以图片为例了,然后获取一个输出流:
URL url = new URL(“http://localhost:8080/test1/Upload_image”);
URLConnection connection = url.openConnection();
BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream())
然后利用BufferedOutputStream 的方法,写入数据到流里面给服务器端就行。
然后服务器端是利用的tomcat提供的jar包,其中常用包javax.servlet 下面三张图摘自《java8编程参考官方教程》第9版
从中我们可以看出有一个ServletInputStream这个类,查API文档javaEE api文档下载:点击下载java_ee_api
可以知道这个类能得到一个来自客户端的流,它往往使用HttpServletRequest request; request.getInputStream()这个方法来得到,然后从ServletInputStream这个类有一个方法:
所以我们可以利用这个方法来读取客户端传上来的流数据,然后再原封不动写出去就ok了,下面上代码:
1、客户端
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.Scanner; public class PostImage { public static void main(String[] args) throws IOException { //这个地方根据自己的实际情况做更改,比如你自己的IP地址,以及你在tomcat中的工程部署 //这里的地址要和web.xml当中的设置匹配 String url = "http://localhost:8080/test1/Upload_image"; String result = doPost(url); System.out.println(result); } public static String doPost(String urlString) throws IOException { URL url = new URL(urlString); URLConnection connection = url.openConnection(); connection.setDoOutput(true); //try里面拿到输出流,输出端就是服务器端 try (BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream())) { //我java代码是在Windows上运行的,图片路径就是下面这个 InputStream is = new FileInputStream("d:/0213.JPG"); BufferedInputStream bis = new BufferedInputStream(is); byte[] buf= new byte[1024]; int length = 0; length = bis.read(buf); while(length!=-1) { bos.write(buf, 0, length); length = bis.read(buf); } bis.close(); is.close(); bos.close(); } //下面是服务器端如果有返回数据的话,做接收用的 StringBuilder response = new StringBuilder(); try (Scanner in = new Scanner(connection.getInputStream())) { while (in.hasNextLine()) { response.append(in.nextLine()); response.append("\n"); } } catch (IOException e) { if (!(connection instanceof HttpURLConnection)) throw e; InputStream err = ((HttpURLConnection) connection).getErrorStream(); if (err == null) throw e; Scanner in = new Scanner(err); response.append(in.nextLine()); response.append("\n"); in.close(); } return response.toString(); } }
2、服务器端
import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Upload_image extends HttpServlet{ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter pw = response.getWriter(); //回复给客户端一个信息 pw.println("receive!"); //利用request对象返回客户端来的输入流 try (ServletInputStream sis = request.getInputStream()) { OutputStream os = new FileOutputStream("d:/sevlet.jpg"); BufferedOutputStream bos = new BufferedOutputStream(os); byte[] buf= new byte[1024]; int length = 0; length = sis.readLine(buf, 0, buf.length);//使用sis的读取数据的方法 while(length!=-1) { bos.write(buf, 0, length); length = sis.read(buf); } sis.close(); bos.close(); os.close(); } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //转到doGet中做处理 doGet(request, response); } }
最后在web.xml中配置好即可:
<servlet> <servlet-name>Upload_image</servlet-name> <servlet-class>Upload_image</servlet-class> </servlet> <servlet-mapping> <servlet-name>Upload_image</servlet-name> <url-pattern>/Upload_image</url-pattern> </servlet-mapping>
总结:
上传图片归根结底其实就是使用了IO流的概念,把二进制数据当成流来读写,即能达到传输的目的。之前查到网上有一些现有的框架、或者是Apache提供的包,捣鼓半天没弄出来,还是英语水平太差了,因为那些包并不常用,所以只有官网上的api文档,很多方法不知道怎么用,后来自己捣鼓出这种直接以流的方式来传输,感觉也还是可以。
相关文章推荐
- java 代码post表单数据到服务器,servlet接收处理
- Android经服务器授权登陆并将图片Post到自己服务器的简单小Demo(Java+servlet实现)
- Flash 二进制传图片到后台Java服务器接收
- 学习Java Web开发【2】可传输图片的服务器的代码编写
- Android 手机上传图片至javaweb服务器(servlet)
- Java编程Post数据请求和接收代码详解
- java后台接收app上传的图片的示例代码
- Servlet post接收form-data参数值java
- Java后台服务器接收IOS客户端上传的图片
- [置顶] Android开发之下载服务器上的一张图片到本地java代码实现HttpURLConnection
- summernote图片上传功能保存到服务器指定文件夹+php代码+java方法
- PHP使用CURL向服务器POST文本数据和上传图片的代码示例
- Java微信公众平台开发(2) 微信服务器post消息体的接收
- java(android)客户端post方式上传多图片至服务器
- java_通过Servlet 将服务器硬盘图片展示到浏览器
- 用ASIHttpRequest通过post请求给java服务器上传的代码(不会出现乱码)
- java模拟post传输文件到tomcat服务器端servlet接收
- java POI导出excel(带有图片的数据)以及ftp上传图片到另一台服务器的方法参考代码
- java httpclient 上传文件 服务器 servlet 接收
- 搭建图片服务器《四》:后台java代码springMVC+spring实现图片上传