对Java研究不深,各位路过的园友帮看一下。
先上代码:
HttpClient client= HttpClients.createDefault(); HttpPost post = new HttpPost(url); MultipartEntityBuilder builder = MultipartEntityBuilder.create().addPart("file", new FileBody(file)); builder.seContentType(ContentType.DEFAULT_BINARY); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); long length = file.length(); HttpEntity entity = builder.build(); post.setEntity(entity); HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode()==200) { System.out.println("Success"); }
通过HttpClient上传一个问题,服务器接口使用的是WCF
[WebInvoke( Method = "POST", UriTemplate ="/file/add", BodyStyle = WebMessageBodyStyle.Bare )] void UploadFile(Stream stream);
问题如下:
我选择上传的文件大小为 2109952
但生成后HttpEntity对象内容长度变为了 2110141 ,对这块不熟悉,猜测可能写入了头信息等
在WCF这端,我收到的字节长度为 2110145 。
我怎么才能得到源文件的流? 大脑不够用了已经。
谢谢园友们。
UploadFile(Stream stream);这个方法的参数stream就是上传的原始内容,WCF不会针对该参数添加任何额外信息。你可以自己写个form表单提交到改操作进行测试(我测试过)。我现在这里网络原因看不到你那张截图(网络屏蔽)。不知道你在处理流的时候有没有每次只写入已读取到的长度,而不是buffer的长度?这是最常见的原因。
谢谢园友的回答,问题我已经解决,服务端是没有问题的。
是什么原因啊