Created
January 24, 2018 12:00
-
-
Save ZaeemSattar/f4ad6523111907d324c59eff1a000e9f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// pick single image from gallery | |
private fun openGalleryImages() { | |
val intent = Intent(Intent.ACTION_PICK) | |
intent.type = "image/*" | |
startActivityForResult(Intent.createChooser(intent, "Select Picture"), TYPE_IMAGE) | |
} | |
// get path | |
private fun getPath(uri: Uri): String { | |
val projection = arrayOf(MediaStore.Images.Media.DATA) | |
val cursor = managedQuery(uri, projection, null, null, null) | |
val column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA) | |
cursor.moveToFirst() | |
return cursor.getString(column_index) | |
} | |
inner class UploadTask : AsyncTask<String, Int, Int>() { | |
override fun doInBackground(vararg p0: String?): Int? = uploadFileToServer() | |
private fun uploadFileToServer(): Int { | |
val conn: HttpURLConnection? | |
val dos: DataOutputStream? | |
val lineEnd = "\r\n" | |
val twoHyphens = "--" | |
val boundary = "*****" | |
var bytesRead: Int | |
var bytesAvailable: Int | |
var bufferSize: Int | |
val buffer: ByteArray | |
val maxBufferSize = 1 * 1024 * 1024 | |
var serverResponseCode = 0 | |
val sourceFile = File(getPath(mCurrentUri) ) | |
val fileName = getTimeString() | |
if (!sourceFile.exists()) { | |
runOnUiThread { Toast.makeText(this@EditProfileActivity, "File don't exists", Toast.LENGTH_SHORT).show() } | |
} else { | |
try { | |
// open a URL connection to the Servlet | |
val fileInputStream = FileInputStream(sourceFile) | |
val url = URL(UrlConstants.FILE_UPLOAD) | |
// Open a HTTP connection to the URL | |
conn = url.openConnection() as HttpURLConnection? | |
conn?.doInput = true // Allow Inputs | |
conn?.doOutput = true // Allow Outputs | |
conn?.useCaches = false // Don't use a Cached Copy | |
conn?.requestMethod = "POST" | |
conn?.setRequestProperty("Connection", "Keep-Alive") | |
conn?.setRequestProperty("ENCTYPE", "multipart/form-data") | |
conn?.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary) | |
conn?.setRequestProperty("uploaded_file", fileName) | |
dos = DataOutputStream(conn?.outputStream) | |
dos.writeBytes(twoHyphens + boundary + lineEnd) | |
dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" | |
+ fileName + "\"" + lineEnd) | |
dos.writeBytes(lineEnd) | |
// create a buffer of maximum size | |
bytesAvailable = fileInputStream.available() | |
bufferSize = Math.min(bytesAvailable, maxBufferSize) | |
buffer = ByteArray(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) | |
// Responses from the server (code and message) | |
serverResponseCode = conn!!.responseCode | |
val serverResponseMessage = conn.responseMessage | |
Log.i("uploadFile", "HTTP Response is : " | |
+ serverResponseMessage + ": " + serverResponseCode) | |
if (serverResponseCode == 200) { | |
runOnUiThread({ | |
run { Toast.makeText(this@EditProfileActivity, "200 ", Toast.LENGTH_SHORT).show() } | |
}) | |
} | |
//close the streams // | |
fileInputStream.close() | |
dos.flush() | |
dos.close() | |
} catch (ex: MalformedURLException) { | |
runOnUiThread({ | |
run { | |
Toast.makeText(this@EditProfileActivity, "MalformedURLException", Toast.LENGTH_SHORT).show(); | |
} | |
}) | |
Log.e("Upload file to server", "error: " + ex.message, ex) | |
} catch (e: Exception) { | |
e.printStackTrace() | |
runOnUiThread({ | |
run { | |
Toast.makeText(this@EditProfileActivity, "Got Exception : see logcat ", Toast.LENGTH_SHORT).show(); | |
} | |
}) | |
Log.e("TAG", "Exception : " + e.message, e) | |
} | |
} | |
return serverResponseCode | |
} | |
private fun getPath(uri: Uri): String { | |
val projection = arrayOf(MediaStore.Images.Media.DATA) | |
val cursor = managedQuery(uri, projection, null, null, null) | |
val column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA) | |
cursor.moveToFirst() | |
return cursor.getString(column_index) | |
} | |
private fun getTimeString(): String { | |
val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date()) | |
return "JPEG_" + timeStamp + "_" + ".jpg" | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment