源自:http://www.coderzheaven.com/2012/03/29/uploading-audio-video-or-image-files-from-android-to-server/
Hello everyone,
In one of the previous posts I have shown one method to upload an image in android.
Here is another method to upload a media file like images,audio or video in android.
Here is the main java file that does the upload.
Here I am trying to open audio from the gallery. However you can change it to image or videoaccording to your need.
The code for upload will not change since we change only the code for opening the gallery. We use only the path of the selected file whether it is image or video or audio to upload.
package
pack.coderzheaven;
import
java.io.DataInputStream;
import
java.io.DataOutputStream;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.IOException;
import
java.net.HttpURLConnection;
import
java.net.MalformedURLException;
import
java.net.URL;
import
java.util.HashMap;
import
android.app.Activity;
import
android.content.Intent;
import
android.database.Cursor;
import
android.net.Uri;
import
android.os.Bundle;
import
android.os.Environment;
import
android.provider.MediaStore;
import
android.util.Log;
public
class
UploadAudioDemo
extends
Activity {
private
static
final
int
SELECT_AUDIO =
2
;
String selectedPath =
""
;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
openGalleryAudio();
}
public
void
openGalleryAudio(){
Intent intent =
new
Intent();
intent.setType(
"audio/*"
);
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Select Audio "
), SELECT_AUDIO);
}
public
void
onActivityResult(
int
requestCode,
int
resultCode, Intent data) {
if
(resultCode == RESULT_OK) {
if
(requestCode == SELECT_AUDIO)
{
System.out.println(
"SELECT_AUDIO"
);
Uri selectedImageUri = data.getData();
selectedPath = getPath(selectedImageUri);
System.out.println(
"SELECT_AUDIO Path : "
+ selectedPath);
doFileUpload();
}
}
}
public
String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection,
null
,
null
,
null
);
int
column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return
cursor.getString(column_index);
}
private
void
doFileUpload(){
HttpURLConnection conn =
null
;
DataOutputStream dos =
null
;
DataInputStream inStream =
null
;
String lineEnd =
"rn"
;
String twoHyphens =
"--"
;
String boundary =
"*****"
;
int
bytesRead, bytesAvailable, bufferSize;
byte
[] buffer;
int
maxBufferSize =
1
*
1024
*
1024
;
String responseFromServer =
""
;
String urlString =
"http://your_website.com/upload_audio_test/upload_audio.php"
;
try
{
//------------------ CLIENT REQUEST
FileInputStream fileInputStream =
new
FileInputStream(
new
File(selectedPath) );
// open a URL connection to the Servlet
URL url =
new
URL(urlString);
// Open a HTTP connection to the URL
conn = (HttpURLConnection) url.openConnection();
// Allow Inputs
conn.setDoInput(
true
);
// Allow Outputs
conn.setDoOutput(
true
);
// Don't use a cached copy.
conn.setUseCaches(
false
);
// Use a post method.
conn.setRequestMethod(
"POST"
);
conn.setRequestProperty(
"Connection"
,
"Keep-Alive"
);
conn.setRequestProperty(
"Content-Type"
,
"multipart/form-data;boundary="
+boundary);
dos =
new
DataOutputStream( conn.getOutputStream() );
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes(
"Content-Disposition: form-data; name="
uploadedfile
";filename="
" + selectedPath + "
""
+ lineEnd);
dos.writeBytes(lineEnd);
// 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);
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);
// close streams
Log.e(
"Debug"
,
"File is written"
);
fileInputStream.close();
dos.flush();
dos.close();
}
catch
(MalformedURLException ex)
{
Log.e(
"Debug"
,
"error: "
+ ex.getMessage(), ex);
}
catch
(IOException ioe)
{
Log.e(
"Debug"
,
"error: "
+ ioe.getMessage(), ioe);
}
//------------------ read the SERVER RESPONSE
try
{
inStream =
new
DataInputStream ( conn.getInputStream() );
String str;
while
(( str = inStream.readLine()) !=
null
)
{
Log.e(
"Debug"
,
"Server Response "
+str);
}
inStream.close();
}
catch
(IOException ioex){
Log.e(
"Debug"
,
"error: "
+ ioex.getMessage(), ioex);
}
}
}
|
Now the server side , the code is written in Php.
<?php
// Where the file is going to be placed
$target_path
=
"uploads/"
;
/* Add the original filename to our target path.
Result is "uploads/filename.extension" */
$target_path
=
$target_path
.
basename
(
$_FILES
[
'uploadedfile'
][
'name'
]);
if
(move_uploaded_file(
$_FILES
[
'uploadedfile'
][
'tmp_name'
],
$target_path
)) {
echo
"The file "
.
basename
(
$_FILES
[
'uploadedfile'
][
'name'
]).
" has been uploaded"
;
}
else
{
echo
"There was an error uploading the file, please try again!"
;
echo
"filename: "
.
basename
(
$_FILES
[
'uploadedfile'
][
'name'
]);
echo
"target_path: "
.
$target_path
;
}
?>
|
Things to keep in mind
1. Make sure your server is running.
2. Your server file path should be right.
3. Check your folder write permission in the server.
Please leave your valuable comments.
Enjoy.