• android 文件上传


    package com.figo.uploadfile;

     

    import java.io.BufferedReader;

    import java.io.DataOutputStream;

    import java.io.FileInputStream;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    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 UploadfileActivity extends Activity

    {

      // 要上传的文件路径,理论上能够传输不论什么文件,实际使用时依据须要处理

      private String uploadFile = "/sdcard/testimg.jpg";

      private String srcPath = "/sdcard/testimg.jpg";

      // server上接收文件的处理页面,这里依据须要换成自己的

      private String actionUrl = "http://10.100.1.208/receive_file.php";

      private TextView mText1;

      private TextView mText2;

      private Button mButton;

     

      @Override

      public void onCreate(Bundle savedInstanceState)

      {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

     

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

        mText1.setText("文件路径: " + uploadFile);

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

        mText2.setText("上传网址: " + actionUrl);

        /* 设置mButton的onClick事件处理 */

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

        mButton.setOnClickListener(new View.OnClickListener()

        {

          @Override

          public void onClick(View v)

          {

            uploadFile(actionUrl);

          }

        });

      }

     

      /* 上传文件至Server,uploadUrl:接收文件的处理页面 */

      private void uploadFile(String uploadUrl)

      {

        String end = " ";

        String twoHyphens = "--";

        String boundary = "******";

        try

        {

          URL url = new URL(uploadUrl);

          HttpURLConnection httpURLConnection = (HttpURLConnection) url

              .openConnection();

          // 设置每次传输的流大小,能够有效防止手机由于内存不足崩溃

          // 此方法用于在预先不知道内容长度时启用没有进行内部缓冲的 HTTP 请求正文的流。

          httpURLConnection.setChunkedStreamingMode(128 * 1024);// 128K

          // 同意输入输出流

          httpURLConnection.setDoInput(true);

          httpURLConnection.setDoOutput(true);

          httpURLConnection.setUseCaches(false);

          // 使用POST方法

          httpURLConnection.setRequestMethod("POST");

          httpURLConnection.setRequestProperty("Connection", "Keep-Alive");

          httpURLConnection.setRequestProperty("Charset", "UTF-8");

          httpURLConnection.setRequestProperty("Content-Type",

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

     

          DataOutputStream dos = new DataOutputStream(

              httpURLConnection.getOutputStream());

          dos.writeBytes(twoHyphens + boundary + end);

          dos.writeBytes("Content-Disposition: form-data; name="uploadedfile"; filename=""

              + srcPath.substring(srcPath.lastIndexOf("/") + 1)

              + """

              + end);

          dos.writeBytes(end);

     

          FileInputStream fis = new FileInputStream(srcPath);

          byte[] buffer = new byte[8192]; // 8k

          int count = 0;

          // 读取文件

          while ((count = fis.read(buffer)) != -1)

          {

            dos.write(buffer, 0, count);

          }

          fis.close();

     

          dos.writeBytes(end);

          dos.writeBytes(twoHyphens + boundary + twoHyphens + end);

          dos.flush();

     

          InputStream is = httpURLConnection.getInputStream();

          InputStreamReader isr = new InputStreamReader(is, "utf-8");

          BufferedReader br = new BufferedReader(isr);

          String result = br.readLine();

     

          Toast.makeText(this, result, Toast.LENGTH_LONG).show();

          dos.close();

          is.close();

     

        } catch (Exception e)

        {

          e.printStackTrace();

          setTitle(e.getMessage());

        }

      }

    }

  • 相关阅读:
    [转]你每天90%的注意力被浪费了
    通过浏览器navigator获取当前经纬度位置
    Sublime Text 3 安装、插件与个人配置
    ios判断手机号是否可用
    AFNetworking提示3840 Unescaped control character around character XXX
    理解OC“属性”这一概念
    熟悉Objective—C
    如何在自己的应用中打开第三方应用程序
    ios多线程开发总结
    UIView的Touch事件UIControlEvents详解
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3783935.html
Copyright © 2020-2023  润新知