2014-05-08 75 views
1

我試圖上傳視頻文件到服務器與轉換爲base64。但是我的內存異常即使大小也是2MB。如何解決這個問題。請幫助我完成,非常感謝您的幫助。內存不足問題編碼到base64視頻文件

我在這裏做什麼

byte [] ba = convertByteArray(videoUri); 
String baseimage=Base64.encodeToString(ba, Base64.NO_WRAP); 

public byte[] convertByteArray(Uri videoUri){ 

     InputStream iStream=null; 
     byte[] inputData=null; 
     try { 
      iStream = getContentResolver().openInputStream(videoUri); 
      inputData = getBytes(iStream); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 


     return inputData; 
    } 

    public byte[] getBytes(InputStream inputStream) throws IOException { 
      ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); 
      int bufferSize = 1024; 
      byte[] buffer = new byte[bufferSize]; 

      int len = 0; 
      while ((len = inputStream.read(buffer)) != -1) { 
      byteBuffer.write(buffer, 0, len); 
      } 
      return byteBuffer.toByteArray(); 
     } 
+0

如果你想上傳大文件到服務器,請使用多部分實體。這是將大文件上傳到服務器的正確方法。否則,你將會遇到內存異常。 –

+0

但是我需要通過base64上傳,怎麼辦? –

回答

-1

代碼:

HttpURLConnection conn = null; 
    DataOutputStream dos = null; 
    DataInputStream inStream = null; 
    String lineEnd = "rn"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 
    int bytesRead, bytesAvailable, bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1*1024*1024; 
    String responseFromServer = ""; 
    String urlString = "http://your_website.com/upload_audio_test/upload_audio.php"; 
    try 
    { 
    //------------------ CLIENT REQUEST 
    FileInputStream fileInputStream = new FileInputStream(new File(selectedPath)); 
    // open a URL connection to the Servlet 
    URL url = new URL(urlString); 
    // Open a HTTP connection to the URL 
    conn = (HttpURLConnection) url.openConnection(); 
    // Allow Inputs 
    conn.setDoInput(true); 
    // Allow Outputs 
    conn.setDoOutput(true); 
    // Don't use a cached copy. 
    conn.setUseCaches(false); 
    // Use a post method. 
    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="uploadedfile";filename="" + selectedPath + """ + lineEnd); 
    dos.writeBytes(lineEnd); 
    // create a buffer of maximum size 
    bytesAvailable = fileInputStream.available(); 
    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); 
    // close streams 
    Log.e("Debug","File is written"); 
    fileInputStream.close(); 
    dos.flush(); 
    dos.close(); 
    } 
    catch (MalformedURLException ex) 
    { 
     Log.e("Debug", "error: " + ex.getMessage(), ex); 
    } 
    catch (IOException ioe) 
    { 
     Log.e("Debug", "error: " + ioe.getMessage(), ioe); 
    } 
    //------------------ read the SERVER RESPONSE 
    try { 
      inStream = new DataInputStream (conn.getInputStream()); 
      String str; 

      while ((str = inStream.readLine()) != null) 
      { 
       Log.e("Debug","Server Response "+str); 
      } 
      inStream.close(); 

    } 
    catch (IOException ioex){ 
     Log.e("Debug", "error: " + ioex.getMessage(), ioex); 
    } 
    } 

經過以下示例的詳細參考:

http://coderzheaven.com/2011/08/uploading-audio-video-or-image-files-from-android-to-server/

對於視頻上傳到服務器看到doFileUpload ()方法從上面的url。