安卓图片上传

2023-12-11

你好,我是 Android 开发新手,我想知道如何在 Android 中上传图像,我没有找到任何有用的教程,你能给我一些指导吗?请帮助我。


我为你构建了这个小方法:

private boolean handlePicture(String filePath, String mimeType) {       
    HttpURLConnection connection = null;
    DataOutputStream outStream = null;
    DataInputStream inStream = null;

    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****";

    int bytesRead, bytesAvailable, bufferSize;

    byte[] buffer;

    int maxBufferSize = 1*1024*1024;

    String urlString = "http://www.yourwebserver.com/youruploadscript.php";

    try {
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(new File(filePath));
        } catch(FileNotFoundException e) { }
        URL url = new URL(urlString);
        connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setUseCaches(false);

        connection.setRequestMethod("POST");
        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);            

        outStream = new DataOutputStream(connection.getOutputStream());

        outStream.writeBytes(addParam("someparam", "content of some param", twoHyphens, boundary, lineEnd));                

        outStream.writeBytes(twoHyphens + boundary + lineEnd);
        outStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"" + filePath +"\"" + lineEnd + "Content-Type: " + mimeType + lineEnd + "Content-Transfer-Encoding: binary" + lineEnd);          
        outStream.writeBytes(lineEnd);

        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        buffer = new byte[bufferSize];

        bytesRead = fileInputStream.read(buffer, 0, bufferSize);

          while (bytesRead > 0) {
              outStream.write(buffer, 0, bufferSize);
            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        }

          outStream.writeBytes(lineEnd);
          outStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

        fileInputStream.close();
        outStream.flush();
        outStream.close();  
    } catch (MalformedURLException e) {
        Log.e("DEBUG", "[MalformedURLException while sending a picture]");
    } catch (IOException e) {
        Log.e("DEBUG", "[IOException while sending a picture]"); 
    }

    try {
           inStream = new DataInputStream( connection.getInputStream() );
           String str;

           while (( str = inStream.readLine()) != null) {
               if(str=="1") {
                   return true;
               } else {
                   return false;
               }
           }
           inStream.close();
      } catch (IOException e){
          Log.e("DEBUG", "[IOException while sending a picture and receiving the response]");
      }
    return false;
}

private String addParam(String key, String value, String twoHyphens, String boundary, String lineEnd) {
        return twoHyphens + boundary + lineEnd + "Content-Disposition: form-data; name=\"" + key + "\"" + lineEnd + lineEnd + value + lineEnd;
}

到目前为止应该可以工作。在您的网络服务器上,您需要一些 PHP 脚本,该脚本在成功上传时返回“1”,在错误时返回其他内容。我还建议在 ASyncTask 中执行此操作,以防止在上传过程中阻塞用户。 在网络服务器端,您有一个名为“uploadedfile”的文件。希望有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安卓图片上传 的相关文章

  • 我用 MediaRecorder 录制的文件无法播放

    我正在使用 MediaRecoder 录制声音 但录制完成后无法播放 我尝试使用Google Play Music ES Media Player 甚至将其上传到电脑并尝试使用Winamp打开它 没什么玩的了 AUDIO RECORDER
  • 使用服务时应用程序终止时音乐暂停

    我正在使用一个Service类在后台播放音乐 当我在顶部显示通知栏时 我的应用程序出现问题 当我终止该应用程序时 音乐停止约 1 秒 然后再次开始 我不知道出了什么问题 我正在关注this https www simplifiedcodin
  • Android 的 MediaPlayer setSurface 在暂停状态下

    EDIT 显然这与多个活动无关 这与视频文件的编码有关 我会尝试简化问题 当我调用时 我有一个处于暂停状态的 MediaPlayer 对象mediaPlayer getCurrentPosition 我得到的结果是准确的 当我打电话时med
  • 选项 多个活动通用的菜单项

    安卓系统设计指南 http developer android com design patterns help html表示 帮助 应始终放置为溢出菜单的最后一项 它不应该出现在 ActionBar 中 而且 它应该出现在每个活动中 以便
  • OpenCV warpPerspective 性能缓慢

    在我的应用程序中 我跟踪一个物体 到达它的地方corners都在这个框架中 我发现它之间的单应性corners从最后一帧开始和 当前帧 使用单应性来做perspectiveTransform on the corners在当前帧中找到 得到
  • 如何在android中以编程方式读取我的应用程序中电子邮件附加的文件?

    我知道一种获取此处显示的电子邮件中附件名称的方法 Android 在我的应用程序中获取电子邮件附件名称 https stackoverflow com questions 6035535 android get email attachme
  • 如何从 AccountManager.getAccounts() 获取与特定帐户关联的图标

    每个帐户的帐户设置中都会显示一个图标 对于 Google 帐户有一个图标 对于 Facebook 帐户有另一个图标 有没有办法从应用程序的代码中获取该图标 最后我解决了 private Drawable getIconForAccount
  • cordova:从 url 下载到 android 下载文件夹

    在开始之前 我尝试了以下堆栈溢出的答案 使用phonegap将文件下载到ios android下载文件夹 https stackoverflow com questions 21375624 download file to downloa
  • Android 拒绝来电

    我想拒绝android中的传入 我从这些链接中看到了很多代码 Android 完全控制手机 信息亭模式 可能吗 如何 https stackoverflow com questions 7121508 android taking comp
  • 在 Android 应用程序中集成 Facebook 和 LinkedIn

    我有一个集成了 Facebook 和 LinkedIn 网络的应用程序 根据说明 为了集成 LinkedIn 我需要在我的活动中的清单中添加以下代码
  • 更改图库中的边框样式

    我正在服用this http www androidpeople com android gallery imageview example 教程 正如你所看到的this http www androidpeople com wp cont
  • Android 视频循环缓冲区与声音

    我正在使用谷歌的开源示例 Grafika https github com google grafika 我正在使用它ContinuousCaptureActivity java https github com google grafik
  • Facebook 和 google 登录不适用于 beta 测试 APK

    Google 和 Facebook 登录在 Android Studio Tools 中工作正常 但它们不适用于测试版本或 Beta 测试 因此请给我任何解决此问题的线索 联系谷歌支持后我已经解决了这个问题 以下是此问题的修复方法 请按照步
  • Android 背景 + 文本 + 按钮图标

    我想要一个图像设置为文本的背景 并在文本的左侧设置一个图标 在iPhone中非常简单 但不知道如何在Android上做到这一点 调整按钮的大小并保持图标 文本的位置和距离正确 iPhone 安卓我有这个 xml代码是
  • Android 应用程序阿拉伯语支持

    我已经按照developer android官方网站上的教程Hello L10进行操作 但没有任何关于阿拉伯语的内容 Android 应用程序要使用阿拉伯语需要执行哪些步骤 例如 用户可以使用组合框或单选按钮来选择英语或阿拉伯语 我已经这样
  • SeekBar 未设置实际进度。 SetProgress() 不适用于早期的 Android 版本 [重复]

    这个问题在这里已经有答案了 我有一个应用程序 我想根据从 Web 服务检索到的值设置特定 SeekBar 的进度 但是 当我使用 SetProgress int 时 只有 SeekBar 的 搜索者 被设置 该栏未按预期 填充 它看起来是这
  • 还有其他地方可以获得 google-services.json 吗?

    我尝试单击GET A CONFIGURATION FILE链接自the docs https developers google com identity sign in android start integrating get conf
  • 平移、缩放或旋转的子视图消失

    我有一个ViewGroup我向其中添加子视图 如下所示 mViewGroup addView view new LayoutParams LayoutParams WRAP CONTENT LayoutParams WRAP CONTENT
  • Firebase:获取对第一个项目/元素的引用

    我正在尝试获取对 firebase Array 中第一个项目的引用 就我而言 它会是 ElmmycgjS1Nvq albums IrdMMds 但我不确定如何构造查询 dbRef child ElmmycgjS albums child n
  • Android Mediaplayer:下载媒体文件的 setDataSource 问题

    我有一个可以录制和播放音频文件的应用程序 一些音频文件是使用 httpclient 使用简单的标准 http 下载来下载的 很长一段时间以来 它就像一种魅力 现在我突然无法播放我下载的文件 该堆栈失败 我将文件存储在 SDCard 上 并且

随机推荐

  • C++ 变体类成员通过引用存储

    我正在尝试使用 std variant 进行实验 我将 std variant 存储为类的成员 在下面的代码中 如果变体按值存储 则一切正常 但如果变体按引用存储 则不起作用 对于向量情况 以及自定义对象 这是为什么 include
  • PostgreSQL:如何返回与找到的行相关的行(相对结果)?

    如果我的例子没有意义 请原谅 我将尝试使用一种简化的方式来鼓励更多的参与 考虑如下表 dt mnth foo 2012 12 01 December 2012 08 01 August 2012 07 01 July 2012 06 01
  • python 太多静态嵌套块

    我正在尝试将包含相同数量项目的超过 21 个列表写入文本文件中的列 import random a b q for i in range 200 a append random gauss 10 0 1 b append random 20
  • Delphi CreateOleObject 事件

    有一段代码 var myobject OleVariant begin myobject CreateOleObject SomeNamespace SomeClass end 该 COM 对象具有事件 例如 OnClick 我应该如何在不
  • Solr Facet 具有逗号分隔值的多个单词

    我正在将数据从 mysql 提取到 solr 中 其中一个字段是使用 group concat 函数生成的 该函数会生成一个以逗号分隔的字段 其中列出了事件的所有频段 当时我相信这是为一项活动存储多个乐队的最佳方式 但是 我发现我无法针对所
  • 如何在同一浏览器上重新运行 Selenium 2.0 (webdriver) 测试?

    我正在尝试使用Selenium 2 0 Webdriver 来实现一系列测试 在运行这些测试之前 我必须登录应用程序 由于该应用程序不是我 自己的 测试 api 构建的功能 因此每个测试不应登录到我的应用程序来运行 我更愿意执行以下操作 将
  • Maven:打包时执行antrun任务

    我需要使用 Maven antrun 插件将 Hibernate 字节码检测添加到我的 Java 类之一 以便启用各个字段的延迟加载 但是 我无法让插件在构建周期中执行 如何指示 Maven 在编译之后 打包之前执行 antrun 插件mv
  • Mysql JOIN(多个)表

    我有3张桌子 其中 2 个是相同的 相同的列 不同的数据 第三个有一些关于其他 2 个的信息数据 数据库如下所示 Table 1 ID Name 1 Table 2 2 Table 3 Table 2 Name Temperature Pr
  • WCF 与实体框架错误

    错误 ObjectContext 实例已被释放 不能再用于需要连接的操作 我正在尝试使用实体框架 VS 2010 NET 4 创建 WCF 服务 当我运行它时 我收到上述错误 我读过一些有关编辑 T4 模板的内容 但似乎它已经有了 Data
  • PHP 正则表达式删除多个 ? 标记

    我无法找到正确的正则表达式字符串来删除多个 的序列 人物 我想替换多个连续的 用一个 但是要转义哪些字符 正在逃避我 输入示例 这东西还开着 或者是什么 期望的输出 这个东西开了吗 或者是什么 我在用着预替换 in PHP preg rep
  • 一些基本操作的 CPU 成本数量级

    回答后那么问题被否决了 我想和你核实一下 为了对我编写的代码的成本有一个初步的了解 我倾向于以这种方式扩展操作 堆分配比堆栈分配慢大约 1000 倍 与屏幕 输出的IO约为1000次 比堆分配慢 硬盘上的 IO 大约慢 1000 倍 与屏幕
  • 如何使用 Passport-google-oauth 成功身份验证后重定向到原始页面

    我正在使用节点 Passport google oauth 模块 并尝试使用基于会话的方法成功进行身份验证后将页面重定向回原始路径Node js Passport 的 Google 策略上的自定义 returnUrl 但是 我发现在回调中
  • PHP MYSQL 多维数组

    我在尝试从两个单独的 MySQL 选择创建多维数组时遇到了很大的麻烦 我一直在这里和谷歌搜索一整天 最后不得不承认失败并寻求一些帮助 我也是新手 这没有帮助 我有两个表 一个表包含每个 id 的单行结果 另一个表可以包含一个 id 的多行结
  • 如何确定git中最后合并的分支?

    我需要确定哪个是最后合并到 master 的分支 我一直在搜索 git 文档 但我仍然有点迷失 到目前为止我已经找到了命令 假设master是我当前的分支 git log oneline graph decorate 这为我提供了这样的输出
  • 如何进行合并?

    我有一个主分支和一个功能分支 feature 分支有一些更改 但 master 分支有很多更改 例如从存储库中删除了 10 个项目 问题是如何将feature分支合并回master分支 1 将feature与master合并 然后maste
  • 如何让ffmpeg根据设置的高度比例计算修改后的宽度?

    找到解决方案后 我的 Android 上所有 webm 到 MP4 编解码器转换错误的根源 我遇到了另一个问题 分解我的问题 大多数设备都支持哪些 MP4 分辨率 我知道它们从某个高度值开始经过 p 才能工作 例如 720p X720 有没
  • 从列表创建多个复选框并获取所有值

    我想从一个大列表中生成多个复选框 并获取所有值 这是到目前为止我的代码 列表可能更大 from Tkinter import def print ingredients args values cheese cheese get ham h
  • 如何在 python 中将多图像 TIFF 转换为 PDF?

    我想在 python 中将多图像 TIFF 转换为 PDF 我是这样写的代码 这段代码怎么行不通 我应该如何改变它 images img Image open multipage tif for i in range 4 try img s
  • PHP - 打印带有控制字符的字符串

    有没有办法让 PHP 输出一个带有 r n 和 n 的字符串作为实际文本而不是换行符 我看到一个有趣的问题 n 上的explode 无法在Windows 服务器上正常运行 编辑 r n 来自用户在输入文本区域时按 Enter 键 所以我没有
  • 安卓图片上传

    你好 我是 Android 开发新手 我想知道如何在 Android 中上传图像 我没有找到任何有用的教程 你能给我一些指导吗 请帮助我 我为你构建了这个小方法 private boolean handlePicture String fi