Когда я загружаю видео на сервер (Vimeo) с Android, все в порядке.
Но во время загрузки, если я теряю сетевое соединение, я не могу запустить .write I / OИсключение из DataOutputStream.Так что мое приложение зависло.
Как я могу вызвать исключение, чтобы возобновить или сбросить загрузку?
Мой try / catch не вызывает исключение…
Вотмой код:
private void call_for_ticket(String upload_url, String complet_uri, String videoUri) {
HttpURLConnection conn = null;
DataOutputStream dos = null;
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024;
File sourceFile = new File(videoUri);
if (sourceFile.isFile())
{
try
{
// open a URL connection to the Servlet
FileInputStream fileInputStream = new FileInputStream(
sourceFile);
URL url = new URL(upload_url);
// Open a HTTP connection to the URL
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true); // Allow Inputs
conn.setDoOutput(true); // Allow Outputs
conn.setUseCaches(false); // Don't use a Cached Copy
conn.setRequestMethod("PUT");
conn.setRequestProperty("Authorization",Aurtorizartion);
conn.setRequestProperty("Accept",accept);
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "video/mp4");
conn.setChunkedStreamingMode(-1);
try {
dos = new DataOutputStream(conn.getOutputStream());
// 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);
long bytesAvailableReadIncrementation = 0;
long totalFileSize = bytesAvailable;
try{
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math
.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0,
bufferSize);
bytesAvailableReadIncrementation += bytesRead;
publishProgress("" + (long) ((bytesAvailableReadIncrementation * 100) / totalFileSize));
}
} catch (IOException e) {
Log.d("VMA", "lost connection");
e.printStackTrace();
}
// send multipart form data necesssary after file
// data...
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens
+ lineEnd);
int serverResponseCode;
// Responses from the server (code and message)
serverResponseCode = conn.getResponseCode();
String serverResponseMessage = conn
.getResponseMessage();
// close the streams //
fileInputStream.close();
dos.flush();
dos.close();
if (serverResponseCode == 200) {
call_complete_uri(complet_uri);
}
}
catch (IOException e)
{
Log.d("VMA", "lost connection");
e.printStackTrace();
}
} catch (IOException e) {
Log.d("VMA", "lost connection");
e.printStackTrace();
}
}
}