java http请求分发_Java实现利用HttpClient和配置文件实现集群模式下的文件同步分发-Go语言中文社区...

集群模式是为了满足分布式环境下多用户并发需求,分担单个服务器的压力,预防因单个服务器超载导致宕机引起的风险,所以集群模式开发软件是当下的一种趋势。集群部署如下图:

2d9adeff1e71468f6a6d139abc6510f5.png

系统中最初考虑将图片以二进制形式保存在顶层数据库中,这样在每台客户端都能够预览图片,但是这样会给数据库带来很大的负担,不是一个好的方案,针对性的我们提出将图片保存在服务器上,数据库中创建一张材料清单与图片路径的映射表,每次预览时现根据映射表查出图片路径,然后将图片以二进制流的形式回写到页面实现预览。但是这里有一个问题,就是用户上传的图片只能上传到自己配置的那台服务器上,对于连接其他服务器的用户来说,数据库中虽然有了映射表,但是服务器指定路径下没有这些图片,从而造成数据不一致问题。如何解决这一问题呢?我们经过思考讨论提出了进行文件同步分发,这样每个服务器上都有一份一模一样的文件,路径也相同,从而实现了集群环境下的数据同步。

还有一个问题就是怎样一个性上传多个具有图片和材料清单映射关系的图片呢,我们知道多图片上传插件uploadify可以同时上传多个文件,他的上传原理是先把你选取的文件放入到待上传队列中,然后再从队列中逐个出队列上传,这种方式很好,但是缺乏我们需要的映射关系,所以我们没有采取这种上传方式。我们的思路是:

1)每次选取完单个图片的时候都立即将其上传到服务器上的一个临时文件夹下面,并且将文件名改写成我们需要的文件名,上传完后将该文件名回写到页面。

2)选择完所有的图片后,点击确认按钮时,将材料清单编码和图片名拼成一个长字符串,如:arrClqdAndImg=01@01.jpg;02@02.png;03@03.jpeg;提交到后台。

3)后台对arrClqdAndImg进行拆分,在临时路径下找图片,然后将该图片从临时文件夹temp下面复制到真正的文件夹ImgSrc下面,并且往映射表里插入一条映射记录。

4)配置其他服务器的配置文件,如

http://127.0.0.1:8090/xxx/xxx/xxx!xxx.do

在同步分发的时候先解析这个xml,获得路径,遍历本地的资源文件夹ImgSrc,利用HttpClient将文件同步分发到其他服务器上,

/**

* 解析分发路径Xml,通过httpClient调用分发函数

* @return

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用org.apache.http.client.HttpClient上传文件Java示例: ```java import java.io.File; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; public class FileUploader { public static void main(String[] args) { String url = "http://example.com/upload"; String filePath = "/path/to/file.jpg"; HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(url); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.addBinaryBody("file", new File(filePath)); HttpEntity multipart = builder.build(); httpPost.setEntity(multipart); try { httpClient.execute(httpPost); HttpEntity responseEntity = httpResponse.getEntity(); String responseString = EntityUtils.toString(responseEntity, "UTF-8"); System.out.println(responseString); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在此示例中,我们使用HttpClient创建一个HttpPost请求对象,并使用MultipartEntityBuilder创建一个multipart/form-data实体,以便我们可以将文件作为二进制数据添加到请求中。最后,我们使用execute方法将请求发送到服务器,并从响应中提取响应字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值