초보 안드로이드 개발자 입니다.
단말에 있는 이미지 파일과 문자열을 서버(php)로 전송하는 부분을 구현하였습니다.
문제없이 전송이 잘 되는데요..
이미지 파일을 여러개 전송할때는 어떻게 구현해야하는지 몰라서 질문 드립니다.
단순히 writeBytes 부분에 이미지 파일 경로를 하나 더 잡아주면 되는건지..
조언을 부탁 드립니다.
감사합니다.
public int uploadFile(final String sourceFileUri, final String mode, final String savename, final String width, final String height, final ILoveResponseHandler responsehandler)
{
synchronized(queue) {
final Runnable r = new Runnable() {
public void run() {
String upLoadServerUri = "전송할서버url";
String fileName = sourceFileUri;
int serverResponseCode = 0;
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(sourceFileUri);
if (!sourceFile.isFile()) {
Log.e("uploadFile", "Source File not exist :"+sourceFileUri);
}
else
{
try {
// open a URL connection to the Servlet
FileInputStream fileInputStream = new FileInputStream(sourceFile);
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
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("attachfile", fileName);
conn.setRequestProperty("mode", mode);
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"mode\"" + lineEnd);
dos.writeBytes(lineEnd);
dos.writeBytes(mode);
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"savename\"" + lineEnd);
dos.writeBytes(lineEnd);
dos.writeBytes(savename);
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"width\"" + lineEnd);
dos.writeBytes(lineEnd);
dos.writeBytes(width);
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"height\"" + lineEnd);
dos.writeBytes(lineEnd);
dos.writeBytes(height);
dos.writeBytes(lineEnd);
// 이미지 파일
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"attachfile\";filename=\"" + fileName + "\"" + 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);
// Responses from the server (code and message)
serverResponseCode = conn.getResponseCode();
String serverResponseMessage = conn.getResponseMessage();
if(serverResponseCode == 200){
Log.i("uploadFile", "File Upload Complete.");
}
// get response
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String str;
StringBuffer b = new StringBuffer();
while ((str = br.readLine()) != null) {
b.append(str);
}
String response = b.toString();
int statusCode = -1;
JSONObject responseData = null;
try {
responseData = new JSONObject(response);
statusCode = responseData.getInt("result");
if(responsehandler != null)
responsehandler.sendSuccessMessage(statusCode,responseData);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
statusCode = -999;
responseData = new JSONObject();
try {
responseData.put("result", "-999");
responseData.put("error","sendSuccess_error");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(responsehandler != null)
responsehandler.SendErrorMessage(statusCode, responseData);
}
//close the streams //
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();
Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e);
}
//return serverResponseCode;
} // End else block
}
};
queue.addLast(r);
queue.notify();
}
return 1;
}