java http post 同时发送文件流与数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java http post 同时发送文件流与数据相关的知识,希望对你有一定的参考价值。
java http post 如何同时发送文件流与数据??
又如何接收呢?
只发送文件接收是用request.getInputStream();获取文件流
如果文件和数据同时发送是否可行?又如何接收?
数据为json串.
求个例子,发送与接收,谢谢。
您好,提问者:
首先表单、文件同时发送那么肯定是可以的,关于获取的话很难了,因为发送文件的话form必须设置为:multipart/form-data数据格式,默认为:application/x-www-form-urlencoded表单格式。我们称之为二进制流和普通数据流。
刚才说了<form的entype要改为multipart/form-data才能进行发送文件,那么这个时候你表单的另外数据就也会被当成二进制一起发送到服务端。
获取读取过来的内容如下:
//拿到用户传送过来的字节流InputStream is = request.getInputStream();
byte[] b = new byte[1024];
int len = 0;
while((len = is.read(b)) != -1)
System.out.println(new String(b,0,len));
上面如图的代码,我们发现发送过来的表单数据跟文件数据是混乱的,我们根本没办法解析(很麻烦),这个时候我们就需要用到第三方辅助(apache 提供的fileupload.jar)来进行获取。
这个网上有很多代码的,如果有什么不明白可以去自行百度,或者追问,我这里只是给你提供的思路,希望理解,谢谢!
postData += ("&hashcode=" + GetMD5String(pwd));
byte[] data = System.Text.Encoding.UTF8.GetBytes(postData);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("url");
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";//定义文件流形式,这个就是流的类型。
myRequest.ContentLength = data.Length;
Stream newStream = myRequest.GetRequestStream();
// 发送数据
newStream.Write(data, 0, data.Length);
newStream.Close();
// 接收
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd();
http如何实现同时发送文件和报文(用java实现)
java 实现http同时传送文件和报文,以及同时接收文件和报文,文件格式为:post multipart/form-data
并且如何在postman里进行自行测试,最好有完整代码(本人算半小白)
你用的servlet 还是别的框架?
选POST
选form-data
选body
选File
选文件
Send
DiskFileItemFactory factory = new DiskFileItemFactory();factory.setSizeThreshold(1024*1024);
String dirtemp = "c:";
File filedir = new File(dirtemp + "filetemp");
String str = null;if(!filedir.exists())filedir.mkdir();factory.setRepository(filedir);
ServletFileUpload upload = new ServletFileUpload(factory);
List list = upload.parseRequest(request);for(
int i = 0;i<list.size();i++)
FileItem item = (FileItem) list.get(i);
if (item.isFormField())
System.out.println(item.getString());
else
String filename = item.getName();
item.write(new File(request.getRealPath(dir), filename));
追问
我也不知道我用的是什么框架,我是网上找到用httpURLConnection实现的,可以进行报文的传输,但后来对方要增加同时传输报文和文件,然后就不会了
追答我写的这个回答不是说的挺清楚了么。 哪不明白?
参考技术A这个算是web项目中的文件上传功能接口。
java的web项目现在可以使用idea编辑器创建spring boot项目快速构建。(很简单,具体步骤请百度)
文件上传功能也百度吧,一大堆。关键词: spring boot 文件上传
~~~~~~~~~~~~~~~~~~~~~~~
以上是关于java http post 同时发送文件流与数据的主要内容,如果未能解决你的问题,请参考以下文章