Reputation: 5234
I am trying to upload audio file from particular folder of SD-Card to server. but when i try to do that i am getting following error.
error: /mnt/sdcard/AudioRecorder: open failed: EISDIR (Is a directory)
and my full logcat is as below.
01-23 12:44:18.920: E/Debug(6164): error: /mnt/sdcard/AudioRecorder: open failed: EISDIR (Is a directory)
01-23 12:44:18.920: E/Debug(6164): java.io.FileNotFoundException: /mnt/sdcard/AudioRecorder: open failed: EISDIR (Is a directory)
01-23 12:44:18.920: E/Debug(6164): at libcore.io.IoBridge.open(IoBridge.java:448)
01-23 12:44:18.920: E/Debug(6164): at java.io.FileInputStream.<init>(FileInputStream.java:78)
01-23 12:44:18.920: E/Debug(6164): at iqualtech.skirr.Record_AudioPG.doAudioFileUpload(Record_AudioPG.java:295)
01-23 12:44:18.920: E/Debug(6164): at iqualtech.skirr.Record_AudioPG.stopRecording(Record_AudioPG.java:271)
01-23 12:44:18.920: E/Debug(6164): at iqualtech.skirr.Record_AudioPG.access$0(Record_AudioPG.java:265)
01-23 12:44:18.920: E/Debug(6164): at iqualtech.skirr.Record_AudioPG$4.onClick(Record_AudioPG.java:124)
01-23 12:44:18.920: E/Debug(6164): at android.view.View.performClick(View.java:3517)
01-23 12:44:18.920: E/Debug(6164): at android.view.View$PerformClick.run(View.java:14155)
01-23 12:44:18.920: E/Debug(6164): at android.os.Handler.handleCallback(Handler.java:605)
01-23 12:44:18.920: E/Debug(6164): at android.os.Handler.dispatchMessage(Handler.java:92)
01-23 12:44:18.920: E/Debug(6164): at android.os.Looper.loop(Looper.java:154)
01-23 12:44:18.920: E/Debug(6164): at android.app.ActivityThread.main(ActivityThread.java:4624)
01-23 12:44:18.920: E/Debug(6164): at java.lang.reflect.Method.invokeNative(Native Method)
01-23 12:44:18.920: E/Debug(6164): at java.lang.reflect.Method.invoke(Method.java:511)
01-23 12:44:18.920: E/Debug(6164): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
01-23 12:44:18.920: E/Debug(6164): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
01-23 12:44:18.920: E/Debug(6164): at dalvik.system.NativeStart.main(Native Method)
01-23 12:44:18.920: E/Debug(6164): Caused by: libcore.io.ErrnoException: open failed: EISDIR (Is a directory)
01-23 12:44:18.920: E/Debug(6164): at libcore.io.IoBridge.open(IoBridge.java:437)
01-23 12:44:18.920: E/Debug(6164): ... 16 more
and one more logcat below this is
01-23 12:44:18.926: E/AndroidRuntime(6164): FATAL EXCEPTION: main
01-23 12:44:18.926: E/AndroidRuntime(6164): java.lang.NullPointerException
01-23 12:44:18.926: E/AndroidRuntime(6164): at iqualtech.skirr.Record_AudioPG.doAudioFileUpload(Record_AudioPG.java:344)
01-23 12:44:18.926: E/AndroidRuntime(6164): at iqualtech.skirr.Record_AudioPG.stopRecording(Record_AudioPG.java:271)
01-23 12:44:18.926: E/AndroidRuntime(6164): at iqualtech.skirr.Record_AudioPG.access$0(Record_AudioPG.java:265)
01-23 12:44:18.926: E/AndroidRuntime(6164): at iqualtech.skirr.Record_AudioPG$4.onClick(Record_AudioPG.java:124)
01-23 12:44:18.926: E/AndroidRuntime(6164): at android.view.View.performClick(View.java:3517)
01-23 12:44:18.926: E/AndroidRuntime(6164): at android.view.View$PerformClick.run(View.java:14155)
01-23 12:44:18.926: E/AndroidRuntime(6164): at android.os.Handler.handleCallback(Handler.java:605)
01-23 12:44:18.926: E/AndroidRuntime(6164): at android.os.Handler.dispatchMessage(Handler.java:92)
01-23 12:44:18.926: E/AndroidRuntime(6164): at android.os.Looper.loop(Looper.java:154)
01-23 12:44:18.926: E/AndroidRuntime(6164): at android.app.ActivityThread.main(ActivityThread.java:4624)
01-23 12:44:18.926: E/AndroidRuntime(6164): at java.lang.reflect.Method.invokeNative(Native Method)
01-23 12:44:18.926: E/AndroidRuntime(6164): at java.lang.reflect.Method.invoke(Method.java:511)
01-23 12:44:18.926: E/AndroidRuntime(6164): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
01-23 12:44:18.926: E/AndroidRuntime(6164): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
01-23 12:44:18.926: E/AndroidRuntime(6164): at dalvik.system.NativeStart.main(Native Method)
My Code
private void doAudioFileUpload() {
HttpURLConnection conn = null;
DataOutputStream dos = null;
DataInputStream inStream = null;
String existingFileName = Environment.getExternalStorageDirectory()
.getPath() + "/AudioRecorder/";
System.out.println("Inside of doupload nd path is === "
+ existingFileName);
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024 * 1024;
String urlString = "http://link to server/folder-name/upload_audio.php";
try {
// ------------------ CLIENT REQUEST
FileInputStream fileInputStream = new FileInputStream(new File(
existingFileName));
// 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=\""
+ existingFileName + "\"" + 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);
}
}
Upvotes: 1
Views: 1138
Reputation: 581
The log message is clear, you are trying to upload a directory, not a file :
String existingFileName = Environment.getExternalStorageDirectory()
.getPath() + "/AudioRecorder/"
/AudioRecorder/ is not an audio file.You should perhaps append the audio filename at the end.
If you have to upload all the files in the dir, then think about doing that inside an (Intent)service.
In your activity, Loop into the files list, and for each file :
for(String filename : filesList ){
Intent intent = new Intent(this, UploadIntentService.class);
Bundle params = new Bundle();
params.putString(UploadIntentService.KEY_FILE_NAME, filename);
activity.startService(intent);
}
The Service :
public class UploadIntentService extends IntentService {
public static final String KEY_FILE_NAME= "filename";
public UploadIntentService() {
super("UploadIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
String filename = intent.getBundle().getStringExtra(UploadIntentService.KEY_FILE_NAME);
doAudioFileUpload(filename);
}
private void doAudioFileUpload(String filename) {
HttpURLConnection conn = null;
DataOutputStream dos = null;
DataInputStream inStream = null;
String existingFileName = Environment.getExternalStorageDirectory()
.getPath() + "/AudioRecorder/"+filename;
System.out.println("Inside of doupload nd path is === "
+ existingFileName);
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024 * 1024;
String urlString = "http://link to server/folder-name/upload_audio.php";
try {
// ------------------ CLIENT REQUEST
FileInputStream fileInputStream = new FileInputStream(new File(
existingFileName));
// 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=\""
+ existingFileName + "\"" + 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);
}
}
Hope it helps
PS: Not tested code.
Upvotes: 2