【问题标题】:Send Image file to server and receive it in Android [closed]将图像文件发送到服务器并在 Android 中接收它[关闭]
【发布时间】:2018-07-27 09:06:54
【问题描述】:

我有一个 Image file,它存储在我的 Android 设备本身的 local storage 中。一旦用户单击一个按钮,我想将图像send 发送到服务器,并在server 中的python script 处理它之后receive 它。然后我想在 ImageView 中显示它并将其存储在我的本地存储中。我正在寻找客户端和服务器端的实现。此外,服务器是否应该始终运行 python 脚本? (一个图像处理脚本,处理客户端发送的图像并将其发送回客户端)

这样做的正确方法是什么?

这样一个流程的基本工作流程是什么?

例如:据我了解,

  • 客户端向服务器发送图像。
  • 服务器在图像上运行 python 脚本(假设它检测到新图像并自动运行 python 脚本)
  • 处理后,服务器以处理后的图像进行响应。 (现在我应该等待服务器将处理后的图像发回吗?因为有时可能会有延迟)
  • 然后客户端将图像显示在ImageView

我对此进行了一些研究,并找到了发送和接收图像的单独教程。

文件接收:https://www.androidhive.info/2012/07/android-loading-image-from-url-http/

文件上传:https://www.androidhive.info/2014/12/android-uploading-camera-image-video-to-server-with-progress-bar/

请指定我可以使用的其他方法。

【问题讨论】:

  • 那么您现在在寻找什么?客户端实现还是服务器端实现?你能说得更具体一点吗?
  • 客户端和服务器实现
  • 有很多方法可以做到这一点,我告诉你我在关注哪一个。单击相机中的图片后,将其保存在本地文件中,使用作业调度程序将文件发送到您的服务器,保存在 s3 中并将 s3 路径发送到您的 android 应用程序。通过使用 glide 或 Picasso,您可以使用该 s3 路径 url 在图像视图中显示图像。
  • 我相信您已经通过您提供的链接实现了客户端实现。您现在可能应该寻找服务器实现如何接收文件以及如何将文件提供回android。 :)

标签: android imageview


【解决方案1】:

有很多方法可以做到这一点,当您开始在 Android 中进行开发时,您可以使用您在问题中发布的链接。但是,一旦您对上传和下载代码的性能和数量非常认真,您可能需要使用一些非常知名的库。

改造

可用于将图像(多部分)上传到服务器。代码少且可靠。 https://medium.com/@adinugroho/upload-image-from-android-app-using-retrofit-2-ae6f922b184c

滑行

大多数 android 开发人员用来下载图像的有用库之一。 https://github.com/bumptech/glide

您只需要编写几行代码即可下载并显示图像,如下所示:-

Glide.with(context)
    .load("http://via.placeholder.com/300.png")
    .into(ivImg);

同样有很多方法可以实现这一点,选择其中一种取决于您。但上面提到的是android开发者中非常常用的库。

【讨论】:

  • 谢谢,我会阅读有关滑翔和改装的信息!我认为这应该可以完成这项工作。
【解决方案2】:

首先您需要上传图片到服务器

  • 根据协议的不同,可能有多种解决方案,但我建议您使用 OkHTTP,因为它在 Android 生态系统中被广泛采用,并且易于使用Uploading a large file in multipart using OkHttp。其他 cmets 建议使用以下 OkHTTP 的 Retrofit。

下载很容易。上传图像后,服务器需要以某种方式响应。它会为您提供指向网络上已处理图像的链接,或者会以二进制形式返回。

  • 如果它提供了链接,您可以使用 Picasso 将其加载到 ImageView 中

    Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

  • 如果它返回二进制文件,则必须将其存储在文件 https://developer.android.com/training/data-storage/files.html 中,然后您可以从该文件创建一个 URI 并再次使用 Picasso 加载它

    Picasso.with(context).load(YOUR_URI).into(imageView);

【讨论】:

  • 服务器返回一个链接。我的疑问是我应该等待服务器返回链接吗?因为有时可能会有延迟,如果是这样,我该如何实施?如果可能的话,请您举例说明。我应该使用AsyncTask 来延迟吗?
  • 发送的文件格式是什么?
  • 这是我发送到烧瓶服务器的 .jpg,它处理它并返回一个图像
  • AsyncTask 没问题,但有很多顾虑。根据文件数量和大小,我会在 IntentService 中上传超过 1 个文件,并在异步 okhttp 或改造调用中上传 1 个文件,小到中等大小。更多关于使用 OkHTTP 上传文件的信息在这里howtoprogram.xyz/2016/11/21/upload-file-okhttp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 2013-11-25
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
相关资源
最近更新 更多