java使用jackrabbit去做webdav上传文件时出现Connection reset by peer: socket write error问题

在使用Java的Jackrabbit库进行WebDAV文件上传时,遇到一个问题:当通过内网IP请求上传时,出现'Connection reset by peer: socket write error'异常。虽然通过域名请求没有问题,且Postman使用IP请求也正常。经过分析源码,发现可能是由于在使用IP地址时未正确处理content-length导致的。目前原因尚未完全理解,欢迎了解该问题的读者交流讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发现使用域名去请求上传文件时,没有问题,后来想提升上传速度,就换成内网ip去请求上传,但是请求后会出现 java.net.SocketException: Connection reset by peer: socket write error的问题,后面又通过postman直接用ip请求发现也是没有问题的,所以对比查看一下jackrabbit和httpclient的源码,发现是ip地址请求时没有对 content-length做处理,具体再深层次的原因应该socket连接的问题,目前自己还没完全吃透,所以就不做详细解释了,免得说错误导大家,如果有知道的朋友可以一起讨论一下。

实现代码如下:

// 上传文件
HttpPut put = new HttpPut(webDavConfig.getBaseUrl() + webDavConfig.getDav() + URLEncoder.encode(fullPath, "utf-8"));
InputStreamEntity requestEntity = new InputStreamEntity(new FileInputStream(file), file.length());
// 在这里设置 content-length 如果在后面通过 put.addHeader()或put.setHeader()的方式设置content-length,会再次报错提示content-length已存在
put.setEntity(requestEntity);
HttpResponse putResponse = client.execute(put, context);
int putStatus = putResponse.getStatusLine().getStatusCode();

if (putStatus == HttpStatus.CREA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值