2015-08-03 55 views
1

如何将视频android上传到Ftp server.i有尝试代码更多的时间,但不适合我..请帮助我...我的问题是文件没有在客户端上传功能发现异常如何清除这个error..Please帮助我..如何上传视频android文件zilla服务器

public class MainActivity extends Activity { 

    private Camera myCamera; 
    private MyCameraSurfaceView myCameraSurfaceView; 
    private MediaRecorder mediaRecorder; 
    String sourceFileUri; 
    Button myButton; 
    SurfaceHolder surfaceHolder; 
    boolean recording; 
    /********* work only for Dedicated IP ***********/ 
    static final String FTP_HOST = "upload.com"; 

    /********* FTP USERNAME ***********/ 
    static final String FTP_USER = "users"; 

    /********* FTP PASSWORD ***********/ 
    static final String FTP_PASS = "12345"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     recording = false; 

     setContentView(R.layout.activity_main); 

     // Get Camera for preview 
     myCamera = getCameraInstance(); 
     myCamera.setDisplayOrientation(90); 
     if (myCamera == null) { 
      Toast.makeText(MainActivity.this, "Fail to get Camera", 
        Toast.LENGTH_LONG).show(); 
     } 

     myCameraSurfaceView = new MyCameraSurfaceView(this, myCamera); 
     RelativeLayout myCameraPreview = (RelativeLayout) findViewById(R.id.relative); 
     myCameraPreview.addView(myCameraSurfaceView); 

     myButton = (Button) findViewById(R.id.btn_capture); 
     myButton.setOnClickListener(myButtonOnClickListener); 
    } 

    Button.OnClickListener myButtonOnClickListener = new Button.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if (recording) { 

       // stop recording and release camera 
       mediaRecorder.stop(); // stop the recording 
       Log.e("mediastop", "" + mediaRecorder); 

       Toast.makeText(MainActivity.this, "Video captured!", 
         Toast.LENGTH_LONG).show(); 


       doFileUpload(); 
      // Log.e("fileupload", "" + f); 
       releaseMediaRecorder(); // release the MediaRecorder object 

       recording = false; 

       // Exit after saved 
       // finish(); 
      } else { 

       // Release Camera before MediaRecorder start 
       releaseCamera(); 

       if (!prepareMediaRecorder()) { 
        Toast.makeText(MainActivity.this, 
          "Fail in prepareMediaRecorder()!\n - Ended -", 
          Toast.LENGTH_LONG).show(); 
        finish(); 
       } 

       mediaRecorder.start(); 
       Toast.makeText(MainActivity.this, "Start Recording..", 
         Toast.LENGTH_LONG).show(); 

       recording = true; 
       // myButton.setText("STOP"); 
      } 
     } 
    }; 

    private Camera getCameraInstance() { 
     // TODO Auto-generated method stub 
     Camera c = null; 
     try { 
      c = Camera.open(); // attempt to get a Camera instance 
     } catch (Exception e) { 
      // Camera is not available (in use or does not exist) 
     } 
     return c; // returns null if camera is unavailable 
    } 

    private File getOutputMediaFile() { 
     // To be safe, you can check that the SDCard is mounted 
     // using Environment.getExternalStorageState() before doing this. 

     File mediaStorageDir = new File(Environment.getExternalStorageDirectory().getPath().toString()+ "/gg/"); 

     // Create the storage directory if it does not exist 
     if (!mediaStorageDir.exists()) { 
      if (!mediaStorageDir.mkdirs()) { 
       Log.d("CameraApp", "failed to create directory"); 
       return null; 
      } 
     } 

     // Create a media file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss") 
       .format(new Date()); 
     File mediaFile; 
     mediaFile = new File(mediaStorageDir.getPath() /*File.separator 
       */+ "VID_" + timeStamp + ".mp4"); 
     Log.e("mediafile", "" + mediaFile); 
     return mediaFile; 
    } 

    private boolean prepareMediaRecorder() { 
     myCamera = getCameraInstance(); 
     myCamera.setDisplayOrientation(90); 
     mediaRecorder = new MediaRecorder(); 

     myCamera.unlock(); 
     mediaRecorder.setCamera(myCamera); 

     mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
     mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

     mediaRecorder.setProfile(CamcorderProfile 
       .get(CamcorderProfile.QUALITY_HIGH)); 
     mediaRecorder.setOrientationHint(90); 
     mediaRecorder.setOutputFile(getOutputMediaFile().getPath()); 
     Log.e("mediarecorder", "" + mediaRecorder); 
     mediaRecorder.setMaxDuration(60000); // Set max duration 60 sec. 
     mediaRecorder.setMaxFileSize(5000000); // Set max file size 5M 
     /* 
     * try { 
     * 
     * doFileUpload(); 
     * 
     * } catch (ParseException e) { // TODO Auto-generated catch block 
     * e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated 
     * catch block e.printStackTrace(); } 
     */ 
     mediaRecorder.setPreviewDisplay(myCameraSurfaceView.getHolder() 
       .getSurface()); 

     try { 
      mediaRecorder.prepare(); 
     } catch (IllegalStateException e) { 
      releaseMediaRecorder(); 
      return false; 
     } catch (IOException e) { 
      releaseMediaRecorder(); 
      return false; 
     } 
     return true; 

    } 

    public void doFileUpload() { 
     if (android.os.Build.VERSION.SDK_INT > 16) { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
        .permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
     } 
    // File f = new File(""+getOutputMediaFile().getPath()); 
     //Log.e("f", "" + f); 

     Uri uri = Uri.parse(""+getOutputMediaFile().getPath()); 
     Log.e("uri",""+uri); 
     File filename = new File(uri.getPath()); 
     Log.e("filename",""+filename); 
     // File fis=fileName; 
     // Log.e("fis",""+fis); 
     FTPClient client = new FTPClient(); 

     try { 

      client.connect(FTP_HOST,21); 
      Log.e("clientconnect", "" + client); 
      client.login(FTP_USER, FTP_PASS); 
      Log.e("clientlogin", "" + client); 
      client.setType(FTPClient.TYPE_BINARY); 
      Log.e("clienttype", "" + client); 
      client.changeDirectory("/gg/"); 
      Log.i("", "$$$$$$$$$$$$$$$$$" + ("/gg/")); 
     // int reply = client.getReplyCode(); 

      client.setPassive(true); 
      Log.e("clientpassive", "" + client); 
      client.noop(); 
      //client.setAutoNoopTimeout(30000); 
      Log.e("clientnoop", "" + client); 
      client.upload(filename,new MyTransferListener()); 
      Log.e("filenameupload", "" + filename); 
      Log.e("clientupload", "" + client); 
      // Log.e("file",""+fileName); 
      Toast.makeText(getBaseContext(), " transferred ..." + client, 
        Toast.LENGTH_SHORT).show(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      try { 
       client.disconnect(true); 
      } catch (Exception e2) { 
       e2.printStackTrace(); 
      } 
     } 

    } 

    public class MyTransferListener implements FTPDataTransferListener { 

     public void started() { 

      // btn.setVisibility(View.GONE); 
      // Transfer started 
      Toast.makeText(getBaseContext(), " Upload Started ...", 
        Toast.LENGTH_SHORT).show(); 
      // System.out.println(" Upload Started ..."); 
     } 

     public void transferred(int length) { 

      // Yet other length bytes has been transferred since the last time 
      // this 
      // method was called 
      Toast.makeText(getBaseContext(), " transferred ..." + length, 
        Toast.LENGTH_SHORT).show(); 
      // System.out.println(" transferred ..." + length); 
     } 

     public void completed() { 

      // btn.setVisibility(View.VISIBLE); 
      // Transfer completed 

      Toast.makeText(getBaseContext(), " completed ...", 
        Toast.LENGTH_SHORT).show(); 
      // System.out.println(" completed ..."); 
     } 

     public void aborted() { 

      // btn.setVisibility(View.VISIBLE); 
      // Transfer aborted 
      Toast.makeText(getBaseContext(), 
        " transfer aborted , please try again...", 
        Toast.LENGTH_SHORT).show(); 
      // System.out.println(" aborted ..."); 
     } 

     public void failed() { 

      // btn.setVisibility(View.VISIBLE); 
      // Transfer failed 
      System.out.println(" failed ..."); 
     } 
     // Jibble. 
    } 


    @Override 
    protected void onPause() { 
     super.onPause(); 
     releaseMediaRecorder(); // if you are using MediaRecorder, release it 
           // first 
     releaseCamera(); // release the camera immediately on pause event 
    } 

    private void releaseMediaRecorder() { 
     if (mediaRecorder != null) { 
      mediaRecorder.reset(); // clear recorder configuration 
      mediaRecorder.release(); // release the recorder object 
      mediaRecorder = null; 
      myCamera.lock(); // lock camera for later use 
     } 
    } 

    private void releaseCamera() { 
     if (myCamera != null) { 
      myCamera.release(); // release the camera for other applications 
      myCamera = null; 
     } 
    } 

    public class MyCameraSurfaceView extends SurfaceView implements 
      SurfaceHolder.Callback { 

     private SurfaceHolder mHolder; 
     private Camera mCamera; 

     public MyCameraSurfaceView(Context context, Camera camera) { 
      super(context); 
      mCamera = camera; 
      // Install a SurfaceHolder.Callback so we get notified when the 
      // underlying surface is created and destroyed. 
      mHolder = getHolder(); 
      mHolder.addCallback(this); 
      // deprecated setting, but required on Android versions prior to 3.0 
      mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     } 

     @Override 
     public void surfaceChanged(SurfaceHolder holder, int format, 
       int weight, int height) { 
      // If your preview can change or rotate, take care of those events 
      // here. 
      // Make sure to stop the preview before resizing or reformatting it. 

      if (mHolder.getSurface() == null) { 
       // preview surface does not exist 
       return; 
      } 

      // stop preview before making changes 
      try { 
       mCamera.stopPreview(); 
      } catch (Exception e) { 
       // ignore: tried to stop a non-existent preview 
      } 

      // make any resize, rotate or reformatting changes here 

      // start preview with new settings 
      try { 
       mCamera.setPreviewDisplay(mHolder); 
       mCamera.startPreview(); 

      } catch (Exception e) { 
      } 
     } 

     @Override 
     public void surfaceCreated(SurfaceHolder holder) { 
      // TODO Auto-generated method stub 
      // The Surface has been created, now tell the camera where to draw 
      // the preview. 
      try { 
       mCamera.setPreviewDisplay(holder); 
       mCamera.startPreview(); 
      } catch (IOException e) { 
      } 
     } 

     @Override 
     public void surfaceDestroyed(SurfaceHolder holder) { 
      // TODO Auto-generated method stub 

     } 
    } 
} 
+0

上存在,创建目录? –

+0

ftp4j-1.7.1.jar库文件... –

+0

你知道解决方案,请告诉我... –

回答

0
  1. 添加公网库可以从https://commons.apache.org/proper/commons-net/download_net.cgi下载到你的Android项目libs文件夹并添加到构建路径

  2. 添加权限<uses-permission android:name="android.permission.INTERNET" />AndroidManifest.xml文件

  3. 要使用Apache共享网络图书馆上传文件的FTP,使用此code

  4. 拷贝类FTPException

  5. 拷贝类FTPUtility

  6. 使用下面的内部代码按钮onClick()

    UploadFileTask task = new UploadFileTask("<Your FTP Host Name>", 21, "<Your FTP User Name>", "<Your FTP Password>", "<Path of FTP Directoty where you want to upload>", new File("<Path of your video file>"));

  7. 使用此code因为如果该FTP库使用的是在您的代码不FTP服务器

相关问题