zoukankan      html  css  js  c++  java
  • Android 实现文件上传功能(upload)

    文件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的。下面是一个模拟网站程序上传文件的例子。这里只写出了Android部分的代码,服务器的代码没有贴出来,有需要完整上传功能代码的朋友可以跟我联系哟

     

    首先新建一个Android工程,新建主启动Activity

     

    MainActivity.java

     

    package com.xzq.upload;

     

    import java.io.DataOutputStream;

    import java.io.FileInputStream;

    import java.io.InputStream;

    import java.net.HttpURLConnection;

    import java.net.URL;

    import android.app.Activity;

    import android.os.Bundle;

    import android.view.View;

    import android.widget.Button;

    import android.widget.TextView;

    import android.widget.Toast;

     

    public class MainActivity extends Activity

    {

     

      private String newName = "htys.mp3";

      //要上传的本地文件路径

      private String uploadFile = "/data/data/com.xzq/htys.mp3";

      //上传到服务器的指定位置

      private String actionUrl = "http://192.168.100.100:8080/upload/upload.jsp";

      private TextView mTextView1;

      private TextView mTextView2;

      private Button mButton1;

     

      @Override

      public void onCreate(Bundle savedInstanceState)

      {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mTextView1 = (TextView) findViewById(R.id.myText2);

        mTextView1.setText("FilePath/n" + uploadFile);

        mTextView2 = (TextView) findViewById(R.id.myText3);

        mTextView2.setText("UploadPath/n" + actionUrl);

        /* 设定mButtononClick事件处理 */

        mButton1 = (Button) findViewById(R.id.myButton);

        mButton1.setOnClickListener(new View.OnClickListener()

        {

          public void onClick(View v)

          {

            uploadFile();

          }

        });

      }

     

      private void uploadFile()

      {

        String end = "/r/n";

        String Hyphens = "--";

        String boundary = "*****";

        try

        {

          URL url = new URL(actionUrl);

          HttpURLConnection con = (HttpURLConnection) url.openConnection();

          /* 允许InputOutput,不使用Cache */

          con.setDoInput(true);

          con.setDoOutput(true);

          con.setUseCaches(false);

          /* 设定传送的method=POST */

          con.setRequestMethod("POST");

          /* setRequestProperty */

          con.setRequestProperty("Connection""Keep-Alive");

          con.setRequestProperty("Charset""UTF-8");

          con.setRequestProperty("Content-Type",

              "multipart/form-data;boundary=" + boundary);

          /* 设定DataOutputStream */

          DataOutputStream ds = new DataOutputStream(con.getOutputStream());

          ds.writeBytes(Hyphens + boundary + end);

          ds.writeBytes("Content-Disposition: form-data; "

              + "name=/"file1/";filename=/"" + newName + "/"" + end);

          ds.writeBytes(end);

          /* 取得文件的FileInputStream */

          FileInputStream fStream = new FileInputStream(uploadFile);

          /* 设定每次写入1024bytes */

          int bufferSize = 1024;

          byte[] buffer = new byte[bufferSize];

          int length = -1;

          /* 从文件读取数据到缓冲区 */

          while ((length = fStream.read(buffer)) != -1)

          {

            /* 将数据写入DataOutputStream */

            ds.write(buffer, 0, length);

          }

          ds.writeBytes(end);

          ds.writeBytes(Hyphens + boundary + Hyphens + end);

          fStream.close();

          ds.flush();

          /* 取得Response内容 */

          InputStream is = con.getInputStream();

          int ch;

          StringBuffer b = new StringBuffer();

          while ((ch = is.read()) != -1)

          {

            b.append((char) ch);

          }

          System.out.println("上传成功");

          Toast.makeText(MainActivity.this"上传成功", Toast.LENGTH_LONG)

              .show();

          ds.close();

        } catch (Exception e)

        {

          System.out.println("上传失败" + e.getMessage());

          Toast.makeText(MainActivity.this"上传失败" + e.getMessage(),

              Toast.LENGTH_LONG).show();

        }

      }

    }

     

    最后别忘了在AndroidManifest.xml中设置访问Internet的权限:

      <uses-permission android:name="android.permission.INTERNET" />

     

    Android中上传文件的原理跟在web中上传文件基本是一致的,代码比较简单,就不多做解释了。

    有问题的可留言或发送邮件zhongnan09@gmail.com

  • 相关阅读:
    5种排序算法
    Numpy 基础
    Git 帮助
    SpringBoot巧用 @Async 提升API接口并发能力
    延时队列实现的方式总结
    Spring Boot 进行优雅的字段校验
    分布式搜索引擎Elasticsearch的架构分析
    Redis 使用规范
    Intellij IDEA远程debug线上项目记录
    领域驱动设计:领域接口化设计
  • 原文地址:https://www.cnblogs.com/top5/p/2347751.html
Copyright © 2011-2022 走看看