从Android上传video到服务器?
任何人都会提出一些示例将SD卡上的video上传到远程服务器?
前段时间有同样的问题。 这是一个代码。
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);
两步解决scheme:
1)从图库中selectvideo文件。
创build一个全局的int private static final int SELECT_VIDEO = 3;
– 不pipe你使用什么号码,只要这是你以后检查的号码。 然后,使用意图select一个video。
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 jar,将其添加到您的项目,并使用以下方法上传video:
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()方法失败之后为我工作。 这也将适用于图像和audio稍微调整。
这些是首先要定义的全局variables:
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;
//然后在button的onclick()方法上调用这两个方法
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 ""; } }