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);
        /* 设定mButton的onClick事件处理 */
        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();
          /* 允许Input、Output,不使用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中上传文件基本是一致的,代码比较简单,就不多做解释了。

  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/3258954.html
Copyright © 2011-2022 走看看