HttpURLConnection 发送图像、音频和视频文件,参数可以是(String 或 Json String)Android

2024-05-02

我正在分享solution发送一个image , audio or a video带有参数的文件使用HttpURL连接。参数可以是(纯字符串或 JSON)。

(Android 客户端到 PHP 后端)

设想: 必须上传媒体文件(带参数的音频、视频和图像)。

媒体文件将存储在服务器文件夹中,参数将存储在数据库中。

我遇到一个问题,图片上传成功 while 参数丢失.

找到了潜在的解决方案

选择HttpURL连接代替Http客户端 as 在这里推荐 http://android-developers.blogspot.in/2011/09/androids-http-clients.html

您可能想知道,哪个客户端最好?

Apache HTTP 客户端在 Eclair 和 Froyo 上的错误较少。它是这些版本的最佳选择。

对于 Gingerbread 以及更好的,HttpURLConnection 是最佳选择。其简单的 API 和小尺寸使其非常适合 Android。透明压缩和响应缓存可减少网络使用、提高速度并节省电池。新应用程序应该使用HttpURLConnection;这是我们未来将花费精力的地方。

安卓代码:

public int uploadFile(final String sourceFileUri) {

    String fileName = sourceFileUri;

    HttpURLConnection conn = null;
    DataOutputStream dos = null;
    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****";
    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;
    int maxBufferSize = 1 * 1024 * 1024;
    File sourceFile = new File(sourceFileUri);

    if (!sourceFile.isFile()) {

        dialog.dismiss();

        Log.e("uploadFile", "Source File not exist :" + filepath);

        runOnUiThread(new Runnable() {
            public void run() {
                messageText.setText("Source File not exist :" + filepath);
            }
        });

        return 0;

    } else {
        try {
            FileInputStream fileInputStream = new FileInputStream(sourceFile);
            URL url = new URL(upLoadServerUri);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true); // Allow Inputs
            conn.setDoOutput(true); // Allow Outputs
            conn.setUseCaches(false); // Don't use a Cached Copy
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Connection", "Keep-Alive");
        //  conn.setRequestProperty("ENCTYPE", "multipart/form-data");
            conn.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary);
            conn.setRequestProperty("uploaded_file", fileName);


            dos = new DataOutputStream(conn.getOutputStream());


            dos.writeBytes(twoHyphens + boundary + lineEnd);

//Adding Parameter name

            String name="amir";
            dos.writeBytes("Content-Disposition: form-data; name=\"name\"" + lineEnd); 
            //dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd);
            //dos.writeBytes("Content-Length: " + name.length() + lineEnd);
            dos.writeBytes(lineEnd);
            dos.writeBytes(name); // mobile_no is String variable
            dos.writeBytes(lineEnd);

            dos.writeBytes(twoHyphens + boundary + lineEnd);

//Adding Parameter phone
            String phone="9956565656";
            dos.writeBytes("Content-Disposition: form-data; name=\"phone\"" + lineEnd); 
            //dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd);
            //dos.writeBytes("Content-Length: " + name.length() + lineEnd);
            dos.writeBytes(lineEnd);
            dos.writeBytes(phone); // mobile_no is String variable
            dos.writeBytes(lineEnd);


            //Json_Encoder encode=new Json_Encoder();
            //call to encode method and assigning response data to variable 'data'
            //String data=encode.encod_to_json();
            //response of encoded data
            //System.out.println(data);


                //Adding Parameter filepath

            dos.writeBytes(twoHyphens + boundary + lineEnd);
            String filepath="http://192.168.1.110/echo/uploads"+fileName;

            dos.writeBytes("Content-Disposition: form-data; name=\"filepath\"" + lineEnd); 
            //dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd);
            //dos.writeBytes("Content-Length: " + name.length() + lineEnd);
            dos.writeBytes(lineEnd);
            dos.writeBytes(filepath); // mobile_no is String variable
            dos.writeBytes(lineEnd);


//Adding Parameter media file(audio,video and image)

            dos.writeBytes(twoHyphens + boundary + lineEnd);

            dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""+ fileName + "\"" + lineEnd);
            dos.writeBytes(lineEnd);
            // create a buffer of maximum size
            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            buffer = new byte[bufferSize];
            // read file and write it into form...
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);

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

            // send multipart form data necesssary after file data...
            dos.writeBytes(lineEnd);
            dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);


            serverResponseCode = conn.getResponseCode();
            String serverResponseMessage = conn.getResponseMessage();



            Log.i("uploadFile", "HTTP Response is : "+ serverResponseMessage + ": " + serverResponseCode);

            if (serverResponseCode == 200) {

                runOnUiThread(new Runnable() {
                    public void run() {
                         msg = "File Upload Completed.\n\n See uploaded file here : \n\n"
                                + "c:/wamp/www/echo/uploads";
                        messageText.setText(msg);
                        Toast.makeText(MainActivity.this,
                                "File Upload Complete.", Toast.LENGTH_SHORT)
                                .show();
                    }
                });
            }

            // close the streams //
            fileInputStream.close();
            dos.flush();
            dos.close();

        } catch (MalformedURLException ex) {

            dialog.dismiss();
            ex.printStackTrace();

            runOnUiThread(new Runnable() {
                public void run() {
                    messageText
                            .setText("MalformedURLException Exception : check script url.");
                    Toast.makeText(MainActivity.this,
                            "MalformedURLException", Toast.LENGTH_SHORT)
                            .show();
                }
            });

            Log.e("Upload file to server", "error: " + ex.getMessage(), ex);
        } catch (final Exception e) {

            dialog.dismiss();
            e.printStackTrace();

            runOnUiThread(new Runnable() {
                public void run() {
                    messageText.setText("Got Exception : "+e.toString());
                    Toast.makeText(MainActivity.this,
                            "Got Exception : see logcat ",
                            Toast.LENGTH_SHORT).show();
                }
            });
            Log.e("Upload file to server Exception",
                    "Exception : " + e.getMessage(), e);
        }
        dialog.dismiss();
        return serverResponseCode;
    }
}

php代码:

$file_path = "uploads/";

//receive parameters

  $name=$_POST['name'];
  $phone=$_POST['phone'];
  $filepath=$_POST['filepath'];


   //receive media files(image , audio and video)

   $file_path = $file_path . basename( $_FILES['uploaded_file']['name']);
   if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) 
      {
      echo "Success";
      }

希望这可以帮助。

有什么疑问可以问我。


您可以使用Retrofit http://square.github.io/retrofit/用于 API 调用。对 Android 的最低支持为 2.3。请检查详细信息。

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

HttpURLConnection 发送图像、音频和视频文件,参数可以是(String 或 Json String)Android 的相关文章

随机推荐

  • 使用带有 Razor Pages 的复选框列表作为数据库的输入

    我希望表单中的输入之一来自用户选择的复选框列表 我已经研究了几个小时了 但我仍然不明白我需要为此做什么 为什么 MVC 在这个主题上有如此多的帮助 而 Razor 却几乎没有 cshtml
  • Gson:解析通用集合

    是否可以创建一个从 jsson 解析通用集合的方法 我上面的方法不起作用 因为在运行时 gson 在此处返回 LinkedHasmaps 的 ArrayList 但是在编译时没有错误 private
  • MySQL 主键是否已经处于某种默认顺序

    我刚刚在一个我刚刚开始使用的系统中偶然发现了几行我并不真正理解的代码 该系统有一个大表 可以保存大量具有唯一 ID 的实体 并在不再需要时将其删除 但绝不会重用它们 所以桌子看起来像这样 id info1 info2 info3 1 foo
  • 带破折号的参考命令名称

    我最近发现 Powershell 函数只是命名的脚本块 例如 function HelloWorld Write Output Hello world hw function HelloWorld hw 将执行HelloWorld方法 但是
  • Hibernate DDL表动态创建

    我有一个 spring boot 项目 我正在使用 hibernate 将我的实体映射到数据库 但是现在我有一个新的要求 我需要能够在数据库中动态创建表 而无需任何映射 到目前为止 有谁知道一些框架来帮助我处理这个问题 我想执行 SQL 或
  • 如何将触发器添加到谷歌云构建中的队列?

    构建触发器应等到同一存储库的前一个触发器完成执行 如果我两次推送到存储库 触发器会同时执行两次 我不希望这种事发生 如何让云触发器等待上一个触发器作业 提前致谢 使用像 Jenkins 这样的构建服务器 它具有 cloudbuild 所缺少
  • 如何使用 wso2 BPEL 创建和部署带有人工任务的 BPEL 流程

    我还没有找到任何有关创建的文档BPEL使用人工任务进行流程WSO2 BPEL 只有一个例子叫做Claims Approval现有的已准备好部署流程 创建该示例流程的文档也不存在 请帮帮我 发现存在类似的问题 但不幸的是该问题没有答案 任何帮
  • 使用单个 shell 脚本运行 React 和 Flask

    我构建了一个使用 ReactJS 作为前端和 Flask 作为中间件的应用程序 我可以使用以下命令序列来执行它 npm start cd Equation Solver python m flask run 执行第一个命令后 我必须打开另一
  • Android 日历视图字体大小

    我正在使用 Xamarin 构建 Android 应用程序 这是我的第一个应用程序 我有一个CalendarView我需要更改当天的字体大小和样式 我尝试了下面的代码 字体颜色改变了 但尺寸太小了 最低 API 级别为 11 目标 API
  • 如何在使用图像创建视频时添加图像变化动画

    我有一组图像 我想通过按顺序播放这些图像来创建视频 我想在图像发生变化时添加不同类型的动画 建议我一些方法或任何解决方案来通过 Cocoa 框架在 Objective C 中实现此功能 这是制作图像视频的工作代码 但请建议我们在制作视频时如
  • Visual Studio 中的监视窗口

    有没有一种方法可以指定在监视窗口中查看对象的哪些成员 而无需扩展具有所有属性的树 例如 p new Point 10 10 将显示在 Watch 的 Value 列中 X 10 Y 10 对于我自己的课程 它总是显示 MyNamespace
  • 将文件从远程服务器复制到谷歌云存储桶

    如何将文件从远程服务器复制到 Google 存储桶 例如 gcloud compute scp username server path to file gs my bucket 这个方法会报错 All sources must be lo
  • 使用 Swift PDF417 解码并生成相同的条形码

    我有以下 PDF417 条形码示例 可以使用在线工具进行解码 例如zxing https zxing org w decode jspx 结果如下 5wwwwwxwww0app5p3pewi0edpeapifxe0ixiwwdfxxi0xf
  • 从 UIImageView 获取上下文

    我可以获取上下文吗 CGContextRef 来自存在UIImageView 详细信息 我有一个指向 xib 文件的控制器链接 在IB中我添加了一个UIImageView并参考它 IBOutlet UIImageView imageView
  • 带 if 语句的可向量化 FIND 函数 MATLAB

    我有一个矩阵u 我想遍历所有行和所有列并执行以下操作 如果元素非零 我返回行索引的值 如果元素为零 则查找该元素之后的下一个非零元素的行索引 我可以使用两个带有 find 函数的 for 循环轻松完成此操作 但我需要多次执行此操作 不是因为
  • 从 createProcess 外部获取的句柄读取

    我正在尝试创建一个进程 并通过我在外部提供的句柄与其进行通信createProcess功能 stdOutH lt openFile logDir gt stdout log ReadWriteMode hSetBuffering stdOu
  • DELETE 语句与 ASP.NET 动态数据中的 REFERENCE 约束冲突

    我有两个表 Application User 和 Application User Access Application User Access 表与 Application User 表具有外键约束 当我删除 Application Us
  • 如何更改图片框(winform)的边框颜色?

    我想根据不同的事件设置图片框周围的边框颜色 样式 是否有属性或功能可以帮助我实现该目标 我一直用的是这个 要更改边框颜色 请从PaintPicturebox 控件的事件处理程序 private void pictureBox1 Paint
  • 使用 global-method-security,访问被拒绝错误将作为 HTTP 500 错误返回

    我尝试使用 Spring Security Annotations 来确保安全 而不是在 XML 中定义规则 它似乎有效 但是当我遇到访问被拒绝错误时 我收到返回的 HTTP 状态代码 500 我在 tomcat 日志文件中没有看到任何异常
  • HttpURLConnection 发送图像、音频和视频文件,参数可以是(String 或 Json String)Android

    我正在分享solution发送一个image audio or a video带有参数的文件使用HttpURL连接 参数可以是 纯字符串或 JSON Android 客户端到 PHP 后端 设想 必须上传媒体文件 带参数的音频 视频和图像