java - 将一堆图像从 Android 手机发送到 PC
问题描述
我正在开发一个应用程序,该应用程序假设将图像从 android 手机传输到服务器 - 客户端架构中的 PC(下面添加了 java(android)代码)。照片假设通过 bytearray。我很难弄清楚如何通过 TCP 创建一个协议,该协议能够在不丢失信息的情况下传递我的图像,并且还能够传递图像的元数据,例如图像名称、扩展名、大小,也许是元数据大小(如果需要?)。我非常感谢您的帮助,因为我是 C# 的新手,并且正在编写客户端服务器,尤其是假设传输某种扩展图像的客户端服务器。
private void makeTCPConnection() {
try {
InetAddress serverAddr = InetAddress.getByName("10.0.2.2");
//create a socket to make the connection with the server
Socket socket = new Socket(serverAddr, 8000);
try {
//Sends the message to the server
OutputStream output = socket.getOutputStream();
File dcim = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
if(dcim == null)
return;
File[] pics=dcim.listFiles();
int count=0;
if(pics != null){
for(File pic:pics){
FileInputStream fis = new FileInputStream(pic);
Bitmap bm = BitmapFactory.decodeStream(fis);
byte[] imgbyte = getBytesFromBitmap(bm);
output.write(imgbyte);
output.flush();
}
}
}catch (Exception e){
Log.e("TCP","S:Error",e);
}finally {
socket.close();
}
}catch (Exception e){
Log.e("TCP","C:Error",e);
}
}
public byte[] getBytesFromBitmap(Bitmap bitmap){
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG,70,stream);
return stream.toByteArray();
}
解决方案
您是否考虑过编写一个小型REST Web 服务?
这种方法有一些优点:
- HTTP(人类可读)用作协议,因此您不必提出自己的协议。
- JSON(人类可读)可用于传输数据。(也许不是用于照片,而是用于元数据。)
- 客户端和服务器端有很多库。
- 客户端和服务器可以用不同的语言编写。
- 在某些语言中,只需几行代码即可创建 REST Web 服务。
- 在编写客户端应用程序之前,可以先编写 REST Web 服务并对其进行测试(使用 REST 客户端)。
- 可以轻松添加更多 REST 端点。(也许您先构建一个简单的上传,然后添加更多端点来上传元数据。)
对于 Android,我可以推荐Retrofit作为 REST 客户端。如果你想在服务器端使用 Java,我会推荐Spring/Spring Boot。(Spring Boot 中 REST Web 服务的操作指南:https ://spring.io/guides/gs/rest-service/ )
推荐阅读
- php - 如何使用 php 在 html 中访问选择列表的值
- c# - 在 C# 中创建自定义事件
- java - Android:我的 listView onClick 事件未按预期工作(顺序混乱)
- powershell - 在Powershell中根据文件中的第一个单词重命名文本文件
- php - php soap - 400 错误请求
- r - 网页抓取:Set_values 和爬虫的问题
- python - 我怎样才能优化这个脚本,这样它就不需要一周的时间来完成它正在做的任务?(也使用了 BASH PARALLEL。)
- c - 如何在c中加入十六进制值
- firebase - Flutter中的窗口已满错误
- google-cloud-dataflow - SerializableCoder 和 AvroCoder 有什么区别?