이미지와 텍스트를 같이 업로드 하려고 하는데 ㅜㅜ
네트워크 부분은 스레드 처리를 해야만 한다고 인터넷에서 봐서 ㅜㅜ
스레드를 공부해서 적용했는데요...ㅜㅜ
도저히 어떤 부분이 잘못된 것인지 모르겠습니다 ㅜㅜ
param[0], param[1] 이것들은 제목과 내용의 텍스트박스에서 추출한 텍스트들을 매개변수로 받아와요 ㅠㅠ...
protected Void doInBackground(String... param) {
//여기서 데이터 전송이 이루어짐. 이부분을 수정해야함.
Log.d("doInBackground:"+i++, "file upload");
try{
URL url = new URL(weburl+"post01.jsp");
Log.d("doInBackground:"+i++, "");
URLConnection con = url.openConnection();
Log.d("doInBackground:"+i++, "");
con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + sp);
Log.d("doInBackground:"+i++, "");
con.setDoOutput(true);
Log.d("doInBackground:"+i++, "");
//DataOutputStream을 생성하고 이미지와 데이터파일을 여기에 담아 보낸다(바이너리 형식)
DataOutputStream ds = new DataOutputStream(con.getOutputStream());
Log.d("doInBackground:"+i++, "");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
nameValuePairs.add(new BasicNameValuePair("s1", uid)); //user_id
nameValuePairs.add(new BasicNameValuePair("s2", param[0]));//ptitle
nameValuePairs.add(new BasicNameValuePair("s3", param[1]));//pmemo
Log.d("doInBackground:"+i++, "");
//텍스트값
StringBuffer pd = new StringBuffer();
pd.append(sendline);
pd.append(nameValuePairs);
Log.d("doInBackground:"+i++, "");
//이미지 값 (name은 웹서버의 파라미터, filename은 파라미터 값이다
//나는 fName이 이미지파일 절대 경로에서 얻은 이미지파일이름
pd.append(sendline);
pd.append(setImage("image",fname));
Log.d("doInBackground:"+i++, "");
//텍스트, 이미지 파라미터 값 전송(한글처리를 위해 UTF-8로)
ds.writeUTF(pd.toString());
Log.d("doInBackground:"+i++, "");
//path는 이미지 파일 절대 경로 여기부터 파일을 1024(1KB)단위로 쪼개서
//웹서버(톰캣)에 업로드 시킨다
FileInputStream fileInputStream = new FileInputStream(filepath);
Log.d("doInBackground:"+i++, "");
int bytesAvailable = fileInputStream.available();
int maxBufferSize = 1024;
int bufferSize = Math.min(bytesAvailable, maxBufferSize);
byte[] buffer = new byte[bufferSize];
int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
Log.d("doInBackground:"+i++, "");
while (bytesRead > 0)
{Log.d("doInBackground:"+i++, "bytesRead="+bytesRead);
DataOutputStream dataWrite = new DataOutputStream(con.getOutputStream());
Log.d("doInBackground:"+i++, "");
dataWrite.write(buffer, 0, bufferSize); //이미지 전송.
Log.d("doInBackground:"+i++, "image write");
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
Log.d("doInBackground:"+i++, "");
}
fileInputStream.close();
Log.d("doInBackground:"+i++, "");
ds.writeBytes("\r\n--" + sp + "--\r\n");
Log.d("doInBackground:"+i++, "");
//이미지와 텍스트값을 전송할때와 다르게 뒤에 --가 더 붙으며 전송데이터 값의 끝
ds.flush(); //전송완료
//전송을 완료하고 꼭 서버에서 전송된 결과값을 받아야 완벽하게 업로드된 텍스트
//이미지가 저장된다. 중요하다 ..
BufferedReader rd = null;
rd = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
String line = null;
while ((line = rd.readLine()) != null) {
Log.d("BufferedReader: ", line);
}
} catch (MalformedURLException e) {
Log.d("MalformedURLException", e.toString());
}catch(UnsupportedEncodingException ex){
Log.d("UnsupportedEncodingException", ex.toString());
}catch(IOException ez){
Log.d("IOException", ez.toString());
}
//return null;
return null;
}
에러가 아래와 같이 납니다 ㅜㅜ