【问题标题】:How to store image from Android app to MySQL如何将图像从 Android 应用程序存储到 MySQL
【发布时间】:2015-06-02 04:43:35
【问题描述】:

我通过将bitmap 转换为byte array 将图像存储到SQLite

我应该做同样的事情吗?从bitmap 获取byte array,然后到JSON,然后到PHP,最后到MySQL

如果是,我该怎么做?我可以将应用程序中的strings 存储到MySQL,但不能在byte arrays 上存储。

【问题讨论】:

  • 如果您不想对图像进行处理,只需将它们保存在内存中并将它们的引用存储在数据库中。
  • @MisaghEmamverdi 不是我不想要,而是正如我所说.. 我不知道怎么做。你能解释一下你的方法吗?如果我有很多图片会更好吗?

标签: java php android mysql json


【解决方案1】:

只需将字节数组转换为Base64 ... base64 技术上是一个字符串,所以JSON 将它转换为您的webservice,然后将它从Base64 转换回来... 其余的都是历史

这是一个在android中将图像转换为Base64的链接:How to convert a image into Base64 string?

顺便说一句,其他人是对的,将图像本身存储在数据库中并不是那么有效,存储引用会更好......除非你不希望你的图像在 sd 卡上是正确的,这是另一回事,安全明智!

【讨论】:

    【解决方案2】:

    您可以参考这个SO discussion,它讨论了使用 Android 将文件上传到服务器。

    事实上,不建议将二进制数据存储到关系数据库中。请参阅此SO Discussion。相反,推荐的方法是将二进制数据作为文件存储在服务器磁盘位置,并简单地将文件的路径放在数据库中。这将防止由于数据库字符集和编码的差异而导致数据损坏。

    【讨论】:

      【解决方案3】:

      由于您愿意使用另一种更好的解决方案,我将向您解释以下过程。 不要将图像存储在数据库中,而是创建一个专门为图像创建的目录,在您成功上传图像后,将该图像的路径存储在数据库中。之后使用该路径来引用该图像。

      【讨论】:

      • 我关注this tutorial上传了图片,但是怎么找回呢?还是在 Android 应用上显示?
      • 您是将图像存储在数据库中还是将图像存储在文件夹中?
      • 大部分答案建议不要存储在数据库中,而是将它们存储在文件夹中,因此我将放弃将图像存储在数据库中的想法并尝试将它们存储在文件夹中。跨度>
      • 是的,这是一件好事,所以一旦图像上传,将图像的路径存储在数据库中,使用该路径作为你的 android 应用程序中的图像 src。如果您正在搜索从 Web url 显示图像的解决方案,那么我认为这个链接很好地解释了这一点:stackoverflow.com/questions/2471935/…
      • 我一直在尝试以this answer 的身份进行操作,没有错误,但没有任何显示.. 即使this answer 工作正常。我错过了什么?
      【解决方案4】:

      您可以通过POST方法上传图片,然后在数据库中存储参考(例如:-images/img1.bmp)

      只要您需要,您就可以使用 http 请求获取文件引用(您需要为该请求处理编码 php

      您可以使用您的服务器公共 ip 或域访问图像,例如:mydomain.com/app1/images/img1.bmp

      这只是一种方法,所以如果您考虑通过 POST 实现查找文件上传示例

      希望对你有帮助

      【讨论】:

      • 我关注this tutorial上传了图片,但是怎么找回呢?还是在 Android 应用上显示?
      • @Loua 您从数据库中获取图像 URL(例如:-“mydomain.com/app1/images/img1.bmp”,因此您可以将其加载到您的 Android 应用程序 Chek Chirag's Answer here
      • 保存到数据库时必须使用准确的 URL,因此如果您有域名,则将图像放在 public_html 文件夹中,然后您可以通过 mydomain.com/images/img1.jpg 等域名访问您的文件,如果您没有有域名,您可以使用您的 IP 地址和用户名,例如 101.101.111.1/~username/images/img1,如果您使用 cpanel 进行 linux 托管,这将有效-
      • 我一直在尝试以this answer 的身份进行操作,没有错误,但没有任何显示.. 即使this answer 工作正常。我错过了什么?
      • 试试这个代码try { InputStream is = (InputStream) new URL(url).getContent(); Drawable d = Drawable.createFromStream(is, "src name"); return d; } catch (Exception e) { return null; }不要把网址改成你的图片网址
      【解决方案5】:

      使用Multipart文件上传将文件发送到您的网络服务(使用Android Asynchronous Http Client之类的库来简化工作)。然后您可以将文件编码为Base64并以文本形式存储在数据库中,但是将图像文件存储在数据库中不是最佳做法,您应该将图像作为文件保存在服务器中,并将路径保存在 MySql 中。

      【讨论】:

        【解决方案6】:
        public static String imgToBase64(Bitmap bitmap) {
            ByteArrayOutputStream out = null;
            try {
                out = new ByteArrayOutputStream();
                // compress image
                bitmap.compress(Bitmap.CompressFormat.JPEG, 20, out);
        
                out.flush();
                out.close();
        
                byte[] imgBytes = out.toByteArray();
                return Base64.encodeToString(imgBytes, Base64.DEFAULT);
            } catch (Exception e) {
                return null;
            } finally {
                try {
                    out.flush();
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2020-10-02
          • 2016-01-26
          • 2018-12-22
          • 2016-09-23
          • 1970-01-01
          • 2014-02-13
          • 2016-11-20
          • 2015-06-13
          • 1970-01-01
          相关资源
          最近更新 更多