Android загружает видео на удаленный сервер, используя данные мультиплексора HTTP

У меня возникают проблемы с определенной частью текущего проекта и чувствую, что я застрял прямо сейчас. Я пытаюсь выполнить загрузку видео с помощью сообщений HTTP и многостраничных данных. Я чувствую, что я попал в стену, понимая протокол HTTP и, в частности, данные о многочастной форме.

У меня есть URL для загрузки видео в формате http://videoupload.thecompany.com/VideoApp.xml?method=upload&objectType=person&objectId=777777 . Мне также необходимо включить название, описание и видеофайлы, конечно. Являются ли они «многочастными данными»?

Я пробовал адаптировать это решение для удовлетворения моих потребностей. Загружайте видео с Android на сервер? , И установление дополнительных данных, следующих за всеми другими вызовами conn.setRequestProperty (), например:

conn.setRequestProperty("title", "video title"); conn.setRequestProperty("description", "video description"); 

Но это не работает для меня. Есть комментарий от оригинального автора кода, чтобы добавить данные о мультиформатной форме около 30 строк позже, но я не понимаю, почему. Спасибо за любую помощь.

Solutions Collecting From Web of "Android загружает видео на удаленный сервер, используя данные мультиплексора HTTP"

Вот два решения, которые я придумал, в основном из информации и ссылок, найденных здесь . Это решение было проще для меня понять, чем метод upload2server () в некоторых связанных с ним сообщениях SO. Надеюсь, это поможет кому-то другому.

1) Выберите видеофайл из галереи.

Создать переменную private static final int SELECT_VIDEO = 3; – не имеет значения, какое количество вы используете, до тех пор, пока это вам нужно проверить позже. Затем используйте намерение выбрать видео.

 Intent intent = new Intent(); intent.setType("video/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent,"Select a Video "), SELECT_VIDEO); 

Используйте onActivityResult (), чтобы запустить метод uploadVideo ().

 public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == SELECT_VIDEO) { System.out.println("SELECT_VIDEO"); Uri selectedVideoUri = data.getData(); selectedPath = getPath(selectedVideoUri); System.out.println("SELECT_VIDEO Path : " + selectedPath); uploadVideo(selectedPath); } } } private String getPath(Uri uri) { String[] projection = { MediaStore.Video.Media.DATA, MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DURATION}; Cursor cursor = managedQuery(uri, projection, null, null, null); cursor.moveToFirst(); String filePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA)); int fileSize = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE)); long duration = TimeUnit.MILLISECONDS.toSeconds(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION))); //some extra potentially useful data to help with filtering if necessary System.out.println("size: " + fileSize); System.out.println("path: " + filePath); System.out.println("duration: " + duration); return filePath; } 

2) Перейдите на страницу http://hc.apache.org/downloads.cgi , загрузите последнюю банку HttpClient, добавьте ее в свой проект и загрузите видео, используя следующий метод:

 private void uploadVideo(String videoPath) throws ParseException, IOException { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(YOUR_URL); FileBody filebodyVideo = new FileBody(new File(videoPath)); StringBody title = new StringBody("Filename: " + videoPath); StringBody description = new StringBody("This is a description of the video"); MultipartEntity reqEntity = new MultipartEntity(); reqEntity.addPart("videoFile", filebodyVideo); reqEntity.addPart("title", title); reqEntity.addPart("description", description); httppost.setEntity(reqEntity); // DEBUG System.out.println( "executing request " + httppost.getRequestLine( ) ); HttpResponse response = httpclient.execute( httppost ); HttpEntity resEntity = response.getEntity( ); // DEBUG System.out.println( response.getStatusLine( ) ); if (resEntity != null) { System.out.println( EntityUtils.toString( resEntity ) ); } // end if if (resEntity != null) { resEntity.consumeContent( ); } // end if httpclient.getConnectionManager( ).shutdown( ); } // end of uploadVideo( ) 

Как только вы его заработаете, вы, вероятно, захотите поместить его в поток и добавить диалог загрузки, но это поможет вам начать. Работа для меня после того, как я безуспешно попробовал метод upload2Server (). Это также будет работать для изображений и аудио с некоторой незначительной настройкой.