動画ファイル (.mp4) をサーバーに送信しようとしています。バイト配列の送信がかなり時代遅れの方法であることは知っていますが、問題はサーバーを変更できないことです。
1 MB 未満のファイルを送信する場合は問題ありませんが、それより大きいファイルでは機能しません。誰もそれを解決する方法を知っていますか?? それはまったく可能ですか?
サーバー コード: ($data は実際のバイト配列で、先頭の 128 文字はファイル名や ID などのファイル管理用です)
<?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);
}
}