上传视频

定义接口

 

@Multipart
@POST
Observable<String> uploadFile(
        @Url String url,
        @Part("description") RequestBody description1,
        @Part MultipartBody.Part file1,
        @Part("description") RequestBody description2,
        @Part MultipartBody.Part file2);

//调用系统相机

 

package com.xxx.www.videouploading;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;

import java.io.File;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button video;
    private Button images;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Window window = getWindow();// 得到窗口
        requestWindowFeature(Window.FEATURE_NO_TITLE);// 没有标题
        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 屏幕高亮

        setContentView(R.layout.activity_main);
        initView();

    }

    private void initView() {
        video = (Button) findViewById(R.id.video);
        images = (Button) findViewById(R.id.images);

        video.setOnClickListener(this);
        images.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.video:
                Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
//设置视频录制的画质
                intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
                startActivityForResult (intent, 1);
                break;
            case R.id.images:
                startActivity(new Intent(MainActivity.this,ImagesActivity.class));
                break;
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK && requestCode == 1){
            Uri uri = data.getData();
            String[] proj = { MediaStore.Images.Media.DATA };
            Cursor cursor = this.managedQuery(uri, proj, null,null, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            String filepath = cursor.getString(column_index);
            String[] split = filepath.split("Camera/");
            String s = split[1];
            Log.e("tta",filepath);
            Intent intent = new Intent(MainActivity.this, VideoActivity.class);
            intent.putExtra("mp4",s);
            startActivity(intent);


        }
    }
}

//上传路径

 

package com.xxx.www.videouploading;

import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.widget.VideoView;

import com.google.gson.Gson;
import com.xxx.www.videouploading.utils.ApiService;
import com.xxx.www.videouploading.utils.RetrofitHelper;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.RequestBody;
import retrofit2.Retrofit;
import retrofit2.converter.scalars.ScalarsConverterFactory;
import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class VideoActivity extends AppCompatActivity implements View.OnClickListener {
    //生成的文件
    private File vecordFile;
    private Button video;
    private VideoView vv;
    private String latitude="39.95";   // 纬度
    private String longitude="116.30";   // 经度
    private File videoFile;  // 视屏资源
    private File coverFile;  // 视屏封面
    private String videoDesc = "这个视屏非常好看!";  // 视屏描述
    private String uid = "13315";  // uid   废物的id
    private String token = "CA0472E4E3D63DCE47F388F778CA6C17";  // 用户令牌
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);
        Intent intent = getIntent();
        String mp4 = intent.getStringExtra("mp4");
        initView();
        File f1 = Environment.getExternalStorageDirectory();

        videoFile = new File(f1+"/DCIM/Camera",mp4);   // 视屏资源
        File f2 = Environment.getExternalStorageDirectory();
        coverFile = new File(f2,"nv.png");
    }
    private void initView() {
        video = (Button) findViewById(R.id.video);
        video.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.video:
                shangchuan();
                break;
        }
    }

    private void shangchuan() {
        if(!latitude.equals("")&&!longitude.equals("")){
        HashMap<String, String> map = new HashMap<>();
        map.put("uid",uid);
        map.put("videoDesc",videoDesc);
        map.put("latitude",latitude);
        map.put("longitude",longitude);
        map.put("token",token); // ?source=android&appVersion=101
        map.put("source","android");
        map.put("appVersion","101");

        String oldUrl ="quarter/publishVideo";
        StringBuilder stringBuilder = new StringBuilder();//创建一个stringBuilder
        stringBuilder.append(oldUrl);

        if (oldUrl.contains("?")){
            //?在最后面....2类型
            if (oldUrl.indexOf("?") == oldUrl.length()-1){

            }else {
                //3类型...拼接上&
                stringBuilder.append("&");
            }
        }else {
            //不包含? 属于1类型,,,先拼接上?号
            stringBuilder.append("?");
        }

        for (Map.Entry<String,String> entry: map.entrySet()) {
            //拼接
            stringBuilder.append(entry.getKey())
                    .append("=")
                    .append(entry.getValue())
                    .append("&");
        }
        //删掉最后一个&符号
        if (stringBuilder.indexOf("&") != -1){
            stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&"));
        }
        String newUrl = stringBuilder.toString();//新的路径
        // 凡是经过file上传的参数,我都需要对其进行指示,也可以理解为对他进行备注,转码
        // 这这个接口中,我们发现有两个参数是通过file类型上传的,所以我们可以理解为这是一个多文件上传
        // 首先是对文件视频的备注 ,
        // 备注分为三个步骤 1,转为请求体 2.指定真正的参数名 与 实际名   3. 为file类型添加描述
        RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), videoFile);
        // 2.指定真正的参数名 与 实际名
        MultipartBody.Part body = MultipartBody.Part.createFormData("videoFile", videoFile.getName(), requestFile);
        // 3. 为file类型添加字段描述
        String descriptionString = "hello, 这是文件视屏";
        RequestBody description = RequestBody.create(MediaType.parse("multipart/form-data"), descriptionString);
        // 为文件封面进行转码,备注
        RequestBody requestFile1 = RequestBody.create(MediaType.parse("multipart/form-data"), coverFile);
        // MultipartBody.Part is used to send also the actual file name
        MultipartBody.Part body1 = MultipartBody.Part.createFormData("coverFile", coverFile.getName(), requestFile1);
        // 添加描述
        String descriptionString1 = "hello, 这是文件封面";
        RequestBody description1 = RequestBody.create(MediaType.parse("multipart/form-data"), descriptionString1);
                      Log.e("ta",newUrl);
            RetrofitHelper.getApiService("https://www.zhaoapi.cn/").uploadFile(newUrl, description, body, description1, body1)
            .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Observer<String>(){
                        @Override
                        public void onCompleted() {

                        }
                        @Override
                        public void onError(Throwable e) {

                        }

                        @Override
                        public void onNext(String s) {
                            Gson gson = new Gson();
                            ShangChuanBean shangChuanBean = gson.fromJson(s, ShangChuanBean.class);
                            Toast.makeText(VideoActivity.this, shangChuanBean.getMsg(), Toast.LENGTH_LONG).show();
                        }
                    });
        }
    }

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值