2012-07-01 2 views
0

Я пытаюсь отправить видео файлы (.mp4) на сервер. Я знаю, что отправка байт-массивов - довольно устаревший метод, но проблема в том, что я не могу изменить сервер, а не разрешать.Отправка большого байтового массива на сервер php

При отправке файлов размером менее 1 мб все в порядке, но с большими файлами он не работает. кто-нибудь знает, как решить это? Это вообще возможно?

код

Сервер: (в $ данных фактический массив, 128 символов в передней только для управления файлами, например, имя файла и идентификатор)

<?php 

//get data 
if (!isset($HTTP_RAW_POST_DATA)) 
$HTTP_RAW_POST_DATA = file_get_contents("php://input"); 

//cass ------------------------------------------------------------- 
$filename = substr($HTTP_RAW_POST_DATA, 0, 128);  
$filename = trim($filename, " ");    
$filename = explode(";",$filename);  
$fname = $filename[0]; 
$q_id = $filename[1]; 
$data = substr($HTTP_RAW_POST_DATA, 128); 

$length = strlen($data); 

$file = fopen("cassDebug.txt","w"); 
$textout = "QID: $q_id NAME: $fname LENGTH: $length"; 

fwrite($file,$textout); 
fclose($file); 

// write file 
if(strlen($data)>0){ 
     $FSize = strlen($data); 
     $f = fopen("media/$fname",'w'); 
     fwrite($f,$data,$FSize); 
     fclose($f); 
} 

?> 

Java код:

try 
    { 
    FileInputStream fileInputStream = new FileInputStream(new File(pathToOurFile)); 

    URL url = new URL(urlServer); 
    connection = (HttpURLConnection) url.openConnection(); 

    // Allow Inputs & Outputs 
    connection.setDoInput(true); 
    connection.setDoOutput(true); 
    connection.setUseCaches(false); 

    connection.setRequestMethod("POST"); 
    connection.setRequestProperty("Content-Type", "application/octet-stream"); 

    connection.connect(); 

    OutputStream os = connection.getOutputStream(); 

    String fileName = makeLength(fname, fname.length()); 
    String comma = ";"; 
    String audioQuestionId = makeLength(QID, 128 - fname.length() - comma.length()); 

    os.write(fileName.getBytes()); 
    os.write(comma.getBytes()); 
    os.write(audioQuestionId.getBytes()); 

    // Initialize byte array for data transfer 
    byte[] dataBuffer = new byte[2*1024]; 

    // Get total bytes in the file 
      long totalBytes = fileInputStream.available(); 

      System.out.println("Total bytes: "+totalBytes); 

      long bytesRead = 0; 
     int n = 0; 
     while ((n = fileInputStream.read(dataBuffer, 0, 2*1024)) != -1) { 
       os.write(dataBuffer, 0, n); 
       bytesRead += n; 
     } 

      System.out.println(connection.getResponseCode()); 
    System.out.println(connection.getResponseMessage()); 

    fileInputStream.close(); 
    os.flush(); 
    os.close(); 
    connection.disconnect(); 
    } 
    catch (Exception ex){ 
     System.out.println(ex); 
    } 
} 

ответ

0

Проверьте файл php.ini. Предел POST по умолчанию - 1 МБ. Вы, вероятно, не подняли его.

Смежные вопросы