您的位置:首页 > 理论基础 > 计算机网络

Android:How to upload .mp3 file and image to http server?

2012-04-16 16:17 549 查看
问:

My code for uploading image to Server is :
String userIdParameter = String.valueOf(userId);
String fileName = "temporary_holder.jpg";
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;

String sourceFileUri = HomeScreen.get_path();
String upLoadServerUri = "http://10.120.10.87:8080/WebImage/UploadImage";

File sourceFile = new File(sourceFileUri);
if (!sourceFile.isFile()) {
Log.e("Huzza", "Source File Does not exist");
return;
}
int serverResponseCode = 0;
try {

// open a URL connection to the Servlet
FileInputStream fileInputStream = new FileInputStream(sourceFile);

// ------------------ CLIENT REQUEST
URL url = new URL(upLoadServerUri);

// 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

// Use a post method.
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");

conn.setRequestProperty("ENCTYPE", "multipart/form-data");
conn.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
conn.setRequestProperty("file_name", fileName);
conn.setRequestProperty("file_name_audio", fileName);
conn.setRequestProperty("X-myapp-param1", userIdParameter);

// conn.setFixedLengthStreamingMode(1024);
// conn.setChunkedStreamingMode(1);

dos = new DataOutputStream(conn.getOutputStream());

dos.writeBytes(twoHyphens + boundary + lineEnd);

dos.writeBytes("Content-Disposition: form-data; name=\"file_name\";filename=\""
+ fileName + "\"" + lineEnd);

dos.writeBytes(lineEnd);

// create a buffer of maximum size
bytesAvailable = fileInputStream.available();

int streamSize = (int) sourceFile.length();
bufferSize = streamSize / 10;

System.out.println("streamSize" + streamSize);

buffer = new byte[streamSize];

// read file and write it into form...
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
int count = 0;
while (bytesRead > 0) {
progress = (int) (count);
displayNotification();
Thread.sleep(500);

dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
// bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
count += 10;

}

// 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.getResponseCode();
String serverResponseMessage = conn.getResponseMessage();

System.out.println("Upload file to serverHTTP Response is : "
+ serverResponseMessage + ": " + serverResponseCode);
// close streams
System.out.println("Upload file to server" + fileName
+ " File is written");
fileInputStream.close();
dos.flush();
dos.close();
} catch (MalformedURLException ex) {
ex.printStackTrace();
Log.e("Upload file to server", "error: " + ex.getMessage(), ex);
} catch (Exception e) {
e.printStackTrace();
}
// this block will give the response of upload link
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println("RESULT Message: " + line);
}
rd.close();
} catch (IOException ioex) {
Log.e("Huzza", "error: " + ioex.getMessage(), ioex);
}
return; // like 200 (Ok)


Uploading image to server works fine.. I need to upload both mp3 file and image to the server..Please Help

回答:

So, you want to send multiple files in one HTTP request? I've never done this myself, but according to the RFC,
just add another body to the message in which you send the audio, it should look something like this:
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"file_name\";filename=\""
+ fileName + "\"" + lineEnd);
dos.writeBytes(lineEnd);
// Code for sending the image....
dos.writeBytes(lineEnd);

dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"file_name_audio\";filename=\""
+ fileNameAudio + "\"" + lineEnd);
dos.writeBytes(lineEnd);
// Code for sending the MP3
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);


Make sure that the names of both parts are different (depending on the server software).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: