반응형
서버쪽 jsp 소스
<%@ page language="java" contentType="text/html; charset=euc-kr" pageEncoding="euc-kr"%>
<%@ page import="java.io.*,java.net.URLEncoder"%>
<%
String filename = "파일명";
String filename2 = new String(filename.getBytes("euc-kr"),"8859_1");
response.setContentType("application/octet-stream");
File file = new File ("D:/JEUS60/webhome/app_home/MobileService/WebContent/file/cmp/"+filename);
byte[] bytestream = new byte[(int)file.length()];
response.setHeader("Content-Disposition", "attachment;filename="+ filename2 + ";");
response.setHeader("Content-Transfer-Encoding", "binary;");
response.setContentLength((int)file.length());
FileInputStream filestream = new FileInputStream(file);
int i = 0, j = 0;
while((i = filestream.read()) != -1) {
bytestream[j] = (byte)i;
j++;
}
OutputStream outStream = response.getOutputStream();
outStream.write(bytestream);
outStream.close();
%>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<title>타이틀</title>
안드로이드쪽 java 소스
String File_Name;
String File_extend;
String fileURL; // URL
String Save_Path;
String Save_folder;
ProgressDialog progress;
DownloadThread dThread;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.siteinfo_detail);
File_Name = "test.pdf";
File_extend = "pdf";
fileURL = "http://www.naver.com/FileDownload.jsp"; // URL
Save_folder = "/mydown";
// 다운로드 경로를 외장메모리 사용자 지정 폴더로 함.
String ext = Environment.getExternalStorageState();
if(ext.equals(Environment.MEDIA_MOUNTED)) {
Save_Path = Environment.getExternalStorageDirectory().getAbsolutePath() + Save_folder;
}
//파일 다운로드 버튼 클릭
btn_pdfDownload = (Button)findViewById(R.id.btn_pdfDownload);
btn_pdfDownload.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
File dir = new File(Save_Path);
// 폴더가 존재하지 않을 경우 폴더를 만듬
if (!dir.exists()) {
dir.mkdir();
}
// 다운로드 폴더에 동일한 파일명이 존재하는지 확인해서 없으면 다운받고 있으면 해당 파일 실행시킴.
if (new File(Save_Path + "/" + File_Name).exists() == false) {
progress = ProgressDialog.show(Siteinfo_detail.this, "","파일 다운로드중..");
dThread = new DownloadThread(fileURL, Save_Path + "/" + File_Name);
dThread.start();
} else {
showDownloadFile();
}
}
});
}
// 다운로드 쓰레드로 돌림..
class DownloadThread extends Thread {
String ServerUrl;
String LocalPath;
DownloadThread(String serverPath, String localPath) {
ServerUrl = serverPath;
LocalPath = localPath;
}
@Override
public void run() {
URL imgurl;
int Read;
try {
imgurl = new URL(ServerUrl);
HttpURLConnection conn = (HttpURLConnection) imgurl.openConnection();
conn.connect();
int len = conn.getContentLength();
byte[] tmpByte = new byte[len];
InputStream is = conn.getInputStream();
File file = new File(LocalPath);
FileOutputStream fos = new FileOutputStream(file);
for (;;) {
Read = is.read(tmpByte);
if (Read <= 0) {
break;
}
fos.write(tmpByte, 0, Read);
}
is.close();
fos.close();
conn.disconnect();
} catch (MalformedURLException e) {
Log.e("ERROR1", e.getMessage());
} catch (IOException e) {
Log.e("ERROR2", e.getMessage());
e.printStackTrace();
}
mAfterDown.sendEmptyMessage(0);
}
}
Handler mAfterDown = new Handler() {
@Override
public void handleMessage(Message msg) {
progress.dismiss();
// 파일 다운로드 종료 후 다운받은 파일을 실행시킨다.
showDownloadFile();
}
};
private void showDownloadFile() {
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
File file = new File(Save_Path + "/" + File_Name);
//파일 확장자 별로 mime type 지정해 준다.
if (File_extend.equals("pdf")) {
intent.setDataAndType(Uri.fromFile(file), "application/pdf");
}
try{
startActivity(intent);
} catch(ActivityNotFoundException e){
Toast.makeText(Siteinfo_detail.this, "해당파일을 실항할 수 있는 어플리케이션이 없습니다.\n파일을 열 수 없습니다.", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
}
반응형
'Android' 카테고리의 다른 글
activity 없이 service 만 실행하기(앱 화면 없이 실행하기) (1) | 2014.03.13 |
---|---|
앱 아이콘 안보아게 하는 방법 (5) | 2014.03.13 |
[Android] 화면 로드시 키보드 내려진 상태로 시작하기 (0) | 2013.09.04 |
ArrayList<String>을 String[] 형으로 변환 (0) | 2013.08.29 |
[Android] WebView POST 방식 호출 (1) | 2013.04.29 |