Загружать видео с Android на сервер?

Кто-нибудь предлагает образец для загрузки видео с SD-карты на удаленный сервер?

Ответ 1

Имел тот же самый вопрос некоторое время назад. Вот код.

public static int upLoad2Server(String sourceFileUri) {
  String upLoadServerUri = "your remote server link";
  // String [] string = sourceFileUri;
  String fileName = sourceFileUri;

  HttpURLConnection conn = null;
  DataOutputStream dos = null;
  DataInputStream inStream = null;
  String lineEnd = "\r\n";
  String twoHyphens = "--";
  String boundary = "*****";
  int bytesRead, bytesAvailable, bufferSize;
  byte[] buffer;
  int maxBufferSize = 1 * 1024 * 1024;
  String responseFromServer = "";

  File sourceFile = new File(sourceFileUri);
  if (!sourceFile.isFile()) {
   Log.e("Huzza", "Source File Does not exist");
   return 0;
  }
  try { // open a URL connection to the Servlet
   FileInputStream fileInputStream = new FileInputStream(sourceFile);
   URL url = new URL(upLoadServerUri);
   conn = (HttpURLConnection) url.openConnection(); // Open a HTTP  connection to  the URL
   conn.setDoInput(true); // Allow Inputs
   conn.setDoOutput(true); // Allow Outputs
   conn.setUseCaches(false); // Don't use a Cached Copy
   conn.setRequestMethod("POST");
   conn.setRequestProperty("Connection", "Keep-Alive");
   conn.setRequestProperty("ENCTYPE", "multipart/form-data");
   conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
   conn.setRequestProperty("uploaded_file", fileName);
   dos = new DataOutputStream(conn.getOutputStream());

   dos.writeBytes(twoHyphens + boundary + lineEnd);
   dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""+ fileName + "\"" + lineEnd);
   dos.writeBytes(lineEnd);

   bytesAvailable = fileInputStream.available(); // create a buffer of  maximum size
   Log.i("Huzza", "Initial .available : " + bytesAvailable);

   bufferSize = Math.min(bytesAvailable, maxBufferSize);
   buffer = new byte[bufferSize];

   // read file and write it into form...
   bytesRead = fileInputStream.read(buffer, 0, bufferSize);

   while (bytesRead > 0) {
    dos.write(buffer, 0, bufferSize);
     bytesAvailable = fileInputStream.available();
     bufferSize = Math.min(bytesAvailable, maxBufferSize);
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    }

   // send multipart form data necesssary after file data...
   dos.writeBytes(lineEnd);
   dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

   // Responses from the server (code and message)
   serverResponseCode = conn.getResponseCode();
   String serverResponseMessage = conn.getResponseMessage();

   Log.i("Upload file to server", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);
   // close streams
   Log.i("Upload file to server", fileName + " File is written");
   fileInputStream.close();
   dos.flush();
   dos.close();
  } catch (MalformedURLException ex) {
   ex.printStackTrace();
   Log.e("Upload file to server", "error: " + ex.getMessage(), ex);
  } catch (Exception e) {
   e.printStackTrace();
  }
//this block will give the response of upload link
  try {
   BufferedReader rd = new BufferedReader(new InputStreamReader(conn
     .getInputStream()));
   String line;
   while ((line = rd.readLine()) != null) {
    Log.i("Huzza", "RES Message: " + line);
   }
   rd.close();
  } catch (IOException ioex) {
   Log.e("Huzza", "error: " + ioex.getMessage(), ioex);
  }
  return serverResponseCode;  // like 200 (Ok)

 } // end upLoad2Server

2) назовите его

int reponse=upLoad2Server(""+filepath);

Ответ 2

Двухэтапное решение:

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

Создайте глобальный int 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 selectedImageUri = data.getData();
            selectedPath = getPath(selectedImageUri);
            System.out.println("SELECT_VIDEO Path : " + selectedPath);

            uploadVideo(selectedPath);        
    }

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 video of the agent");
    StringBody code = new StringBody(realtorCodeStr);

    MultipartEntity reqEntity = new MultipartEntity();
    reqEntity.addPart("videoFile", filebodyVideo);
    reqEntity.addPart("title", title);
    reqEntity.addPart("description", description);
    reqEntity.addPart("code", code);
    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(). Это также будет работать для изображений и аудио с некоторой незначительной настройкой.

Ответ 3

Это глобальные переменные, которые нужно определить первым:

private String mString;
private Uri image_uri;  
private String response;    
private HttpURLConnection conn = null;
private DataOutputStream dos = null;
private String lineEnd = "\r\n";
private String twoHyphens = "--";
private String boundary = "*****";
private int bytesRead, bytesAvailable, bufferSize;
private byte[] buffer;
private String url_for_image_upload = "your_web_api_put_here";
private int maxBufferSize = 1 * 1024 * 1024;

//затем вызовите эти два метода на кнопке onclick() method

mString = getRealPathFromURI(image_uri);

ImageUpload();

//и напишем эти методы следующим образом

private void ImageUpload() {

    Toast.makeText(getApplicationContext(),
            "Please Wait while uploading Image", Toast.LENGTH_SHORT).show();

    try {
        FileInputStream fileInputStream = new FileInputStream(new File(mString));
        URL url = new URL(url_for_image_upload);

        conn = (HttpURLConnection) url.openConnection();
        conn.setDoInput(true);

        conn.setDoOutput(true);

        conn.setUseCaches(false);

        conn.setRequestMethod("POST");
        conn.setRequestProperty("Connection", "Keep-Alive");
        conn.setRequestProperty("Content-Type",
                "multipart/form-data;boundary=" + boundary);
        dos = new DataOutputStream(conn.getOutputStream());
        dos.writeBytes(twoHyphens + boundary + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"img_name\";filename=\"img_name"
                + "\"" + lineEnd);
        dos.writeBytes(lineEnd);
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        buffer = new byte[bufferSize];
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        while (bytesRead > 0) {
            dos.write(buffer, 0, bufferSize);
            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        }
        dos.writeBytes(lineEnd);
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
        BufferedReader in = new BufferedReader(new InputStreamReader(
                conn.getInputStream()));
        Log.d("BuffrerReader", "" + in);

        if (in != null) {
            response = convertStreamToString(in);
            Log.e("FINAL_RESPONSE-LENGTH",""+response.length());
            Log.e("FINAL_RESPONSE", response);
        }

        fileInputStream.close();
        dos.flush();
        dos.close();

        if (response.startsWith("0")) {
            Toast.makeText(getApplicationContext(),
                    "Image Uploaded not successfully", Toast.LENGTH_SHORT)
                    .show();
        } else {
            Toast.makeText(getApplicationContext(),
                    "Image Uploaded successfully", Toast.LENGTH_SHORT)
                    .show();

        }

    } catch (MalformedURLException ex) {
        Log.e("Image upload", "error: " + ex.getMessage(), ex);
    } catch (IOException ioe) {
        Log.e("Image upload", "error: " + ioe.getMessage(), ioe);
    }

}

public String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaColumns.DATA };
    @SuppressWarnings("deprecation")
    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaColumns.DATA);
    cursor.moveToFirst();

    mString = cursor.getString(column_index);

    return mString;

}

public static String convertStreamToString(BufferedReader is)
        throws IOException {
    if (is != null) {
        StringBuilder sb = new StringBuilder();
        String line;
        try {

            while ((line = is.readLine()) != null) {
                sb.append(line).append("");
            }
        } finally {
            is.close();
        }
        return sb.toString();
    } else {
        return "";
    }
}