我正在使用 GCM 云连接服务器实现实时聊天。 我已阅读文档 Upstream messages Using GCM .我学会了如何通过 GCM 将消息上传到我的服务器。众所周知,它比通过 http 将消息发送到网络服务器更可靠,也更好。
但现在我也想在聊天中上传文件。但问题是 GCM 只允许上传最大 4KB 的消息。我可以使用网络服务或 FTP 将文件上传到服务器,然后通过 GCM 将文件名传递给服务器。但我想要更合适的解决方案。那么有没有办法通过 GCM 云连接服务器来做到这一点??
提前感谢您的帮助。
最佳答案
我在这种情况下使用的解决方案是:
1 - 使用 loopj library通过 POST 将文件发送到我的服务器 (php p.ex)
// loopj supports Http Auth, cookies, params, multipart files, etc. So is a good solution. Like:
...
AsyncHttpClient client = new AsyncHttpClient();
client.addHeader("Authorization", "Basic " + Base64.encodeToString("aaa:bbb".getBytes(), Base64.NO_WRAP));
RequestParams params = new RequestParams();
params.put("cmd", "upp");
params.put("uid", Long.toString(getUser().getId()));
params.put("tid", Long.toString(getUser().getIdTeam()));
try{
params.put("avatar", file); // File object
}catch(FileNotFoundException e){
...
}
SharePhotoHandler handler=new SharePhotoHandler(mContext,file,notificate);
client.post(URI_BASE, params, handler);
...
我使用自定义处理程序来控制应用可以控制的文件上传 (SharePhotoHandler.class)
- 成功
- 失败
- 完成
- ...
此方法必须让您控制上传/下载文件状态(确定、错误、上传、下载等)
文件上传后,服务器必须通知其他客户端有新文件要下载,或者在您的“onSuccess”方法上向其他客户端发送 GCM 消息。在我的例子中,服务器向其他客户端发送文件名 (+URL) 以供下载。
关于android - 使用 Google Cloud Messaging 云连接服务器 (XMPP) 的上游文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23988415/