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)来进行获取。

    这个网上有很多代码的,如果有什么不明白可以去自行百度,或者追问,我这里只是给你提供的思路,希望理解,谢谢!

参考技术A 数据的话,直接“&参数名 =参数值”的形式即可,主要是文件流需要进行相应的定义,举例:以文件流的方式发送 和接收。
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

// commons fileupload组件的情况下,servlet接收的数据只能是type=file表单元素类型,那么获取type=text类型,就可以使用parseRequest(request)来获取list,fileitem,判断isFormField,为true非file类型的。就可以处理了。下面是处理的部分代码:

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 文件上传

参考技术B HTTP multipart/form-data 协议本身就是支持的。。。。。。。。写个简单的HTML页面,post到servlet、自己根据协议解析
~~~~~~~~~~~~~~~~~~~~~~~

以上是关于java http post 同时发送文件流与数据的主要内容,如果未能解决你的问题,请参考以下文章

java发送post请求传送文本和文件

java客户端通过http发送POST请求上传文件

java 流与文件理解

java 作业12-流与文件

java week 12 ——流与文件

java模拟post请求发送json数据