HttpUrlConnection, syncFullVideos:
private void syncFullVideos() {
new StreamFileTask().execute();
}
private class StreamFileTask extends AsyncTask<Void,Integer,Void> {
protected Void doInBackground(Void... params) {
syncSucces2 = new boolean[syncVideos.size()];
Arrays.fill(syncSucces2, Boolean.FALSE);
for (int i = 0; i < syncVideos.size(); i++) {
Video video = syncVideos.get(i);
String picturepath = video.getImage_path();
if (fileExists(picturepath)) {
File sourceFile = new File(picturepath);
String fileName = video.getDBImage_path();
int id = video.getId();
int index = syncVideos.indexOf(video);
HttpURLConnection conn;
DataOutputStream dos;
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1024 * 1024;
int serverResponseCode;
Log.e("VideoUpload", "Uploading: sourcefileURI, " + fileName);
if (!sourceFile.isFile()) {
Log.e("uploadFile", "Source File not exist");
} else {
try {
FileInputStream fin = new FileInputStream(sourceFile);
URL url = new URL("http://android.diggin.io/diggin/v1/vidUpload.php");
Log.v("VideoUpload", url.toString());
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("ENCTYPE", "multipart/form-data");
conn.setRequestProperty("Content-Type", "multipart/form-data");
conn.setRequestProperty("X_FILE_NAME", fileName);
conn.setRequestProperty("VID_ID", String.valueOf(id));
conn.setRequestProperty("VID_INDEX", String.valueOf(index));
conn.setRequestProperty("CONTENT_LENGTH", String.valueOf(sourceFile.length()));
publishProgress(2, i);
dos = new DataOutputStream(conn.getOutputStream());
bytesAvailable = fin.available();
int thirdOfBytes = bytesAvailable / 3;
int state = 0;
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
bytesRead = fin.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fin.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fin.read(buffer, 0, bufferSize);
Log.i("VideoUpload", "->");
if (bytesAvailable < thirdOfBytes && state == 1) {
publishProgress(4, i);
state = 2;
} else if (bytesAvailable < (2 * thirdOfBytes) && state == 0) {
publishProgress(3, i);
state = 1;
}
}
publishProgress(5, i);
serverResponseCode = conn.getResponseCode();
String serverResponseMessage = conn.getResponseMessage();
Log.i("VideoUpload", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);
publishProgress(9, i);
DataInputStream inStream;
HashMap<String,String> responseMap = new HashMap<>();
try {
inStream = new DataInputStream(conn.getInputStream());
String str;
while ((str = inStream.readLine()) != null) {
Log.e("VideoUpload", "SOF Server Response: " + str);
String[] responseItem = str.split(" - ");
responseMap.put(responseItem[0], responseItem[1]);
}
inStream.close();
if (responseMap.get("ERROR").equals("FALSE")) {
int index2 = Integer.parseInt(responseMap.get("INDEX"));
syncSucces2[index2] = true;
Log.e("AddSucces(" + (addCount + 1) + "/" + (syncVideos.size()) + ")", video.toString());
}
} catch (IOException e) {
Log.e("VideoUpload", "SOF error: " + e.getMessage(), e);
}
fin.close();
dos.flush();
dos.close();
publishProgress(10, i);
} catch (MalformedURLException ex) {
ex.printStackTrace();
Log.e("VideoUpload", "UL error: " + ex.getMessage(), ex);
} catch (Exception e) {
e.printStackTrace();
Log.e("UploadFileException", "Exception : " + e.getMessage(), e);
}
}
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
progressBar.setProgress(values[0] + (values[1] * 10));
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBar = new ProgressDialog(PictureActivity.this);
progressBar.setMax(10 * syncVideos.size());
progressBar.setMessage("Uploading Video File(s)");
progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressBar.setCancelable(false);
progressBar.show();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progressBar.hide();
refreshPhotos();
}
}
PHP, , index.php( REST API), uploadVideo.php:
<?php
require_once '../include/File_Streamer.php';
require_once '../include/DbHandler.php';
if (!isset($_SERVER['HTTP_X_FILE_NAME']) || !isset($_SERVER['HTTP_VID_ID']) || !isset($_SERVER['HTTP_VID_INDEX'])) {
throw new Exception("Invalid Headers!");
} else {
$im_path = $_SERVER['HTTP_X_FILE_NAME'];
$id = $_SERVER['HTTP_VID_ID'];
$index = $_SERVER['HTTP_VID_INDEX'];
$db = new DbHandler();
$response = array();
if($db->updateVideo($id, $im_path)) {
$im_path2 = explode("_",$im_path);
$im_path2[0] .= 's';
$im_path2[2] = $im_path;
$im_path3 = implode("/",$im_path2);
$filepath = '../images/'.$im_path3;
$dirpath = str_replace($im_path,"",$filepath);
$ft = new File_Streamer();
$ft->setDestination(__DIR__ . '/' . $dirpath);
if ($ft->receive()) {
echo "ERROR - FALSE\n";
echo "MESSAGE - UPLOADED VIDEO WITH SUCCES\n";
echo "INDEX - " . $index;
} else {
echo "ERROR - TRUE\n";
echo "MESSAGE - FAILED TO SAVE VIDEO FILE";
}
} else {
echo "ERROR - TRUE\n";
echo "MESSAGE - FAILED TO ADD TO DATABASE";
}
}
:
<?php
class File_Streamer
{
private $_fileName;
private $_contentLength;
private $_destination;
public function __construct()
{
if (!isset($_SERVER['HTTP_X_FILE_NAME'])
|| !isset($_SERVER['CONTENT_LENGTH'])) {
throw new Exception("Invalid Headers!");
}
$this->_fileName = $_SERVER['HTTP_X_FILE_NAME'];
$this->_contentLength = $_SERVER['CONTENT_LENGTH'];
}
public function isValid()
{
if (($this->_contentLength > 0)) {
return true;
}
return false;
}
public function setDestination($destination)
{
$this->_destination = $destination;
}
public function receive()
{
try {
if (!$this->isValid()) {
throw new Exception('No file uploaded!');
}
$fileReader = fopen('php://input', "r");
$fileWriter = fopen($this->_destination . $this->_fileName, "w+");
while(true) {
$buffer = fgets($fileReader, 4096);
if (strlen($buffer) == 0) {
fclose($fileReader);
fclose($fileWriter);
return true;
}
fwrite($fileWriter, $buffer);
}
return false;
}
catch(Exception $ex) {
echo "error: " . $ex->getMessage();
}
}
}