Galaxy Note 10.1で開発しています
ダウンロード アクションは、Java スプリング アクションを開始します。
このダウンロード アクションは、PC では正常に進行し、モバイル デバイスではブラウザで進行します。
問題はGalaxy Note 10.1の内蔵ブラウザ
このブラウザの userAgent は
「Mozilla/5.0 (Linux; U; Android 4.0.4; ko-kr; SHW-M480W Build/IMM76D) AppleWebKit/534.30 (Gecko のような KHTML) バージョン/4.0 Safari/534.30」
Androidのダウンロード方法は
mWebView.setDownloadListener(new DownloadListener(){ public void onDownloadStart(String url, String sUserAgent, String contentDisposition, String mimetype, long contentLength) { URL urls = null; String fileUrl = ""; String mPath = ""; Log.v( "sUserAgent"、sUserAgent);
String condition[] = contentDisposition.split("=");
String x = condition[1];
Log.d("test",x);
try {
fileUrl = URLDecoder.decode(x, "UTF-8");
} catch(Exception e) {
e.printStackTrace();
}
try {
urls = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
String fileName[] = url.split("/");
Log.d("test", url);
try {
HttpURLConnection conn= (HttpURLConnection)urls.openConnection();
conn.setDoOutput(true);
conn.connect();
mPath = Environment.getExternalStorageDirectory()+"/Download/";
String chkPath = Environment.getExternalStorageDirectory()+"/Download/"+fileUrl;
File chkFile = new File(chkPath);
if(chkFile.exists() == true){}
else {
File f = new File(mPath);
f.mkdirs();
File OutputFile = new File(f, fileUrl);
FileOutputStream fos = new FileOutputStream(OutputFile);
InputStream is = conn.getInputStream();
byte[]buffer = new byte[24576];
int len1 = 0;
while((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "DOWNLOAD COMPLETED", 0).show();
File files = new File(mPath+fileUrl);
Log.e("msg",mPath+fileUrl+"");
Intent intent = new Intent(Intent.ACTION_VIEW);
String mimes = fileUrl.substring(fileUrl.length()-3, fileUrl.length());
if(mimes.equals("hwp")) {
intent.setDataAndType(Uri.fromFile(files), "application/x-hwp");
} else {
intent.setDataAndType(Uri.fromFile(files), "application/"+mimes);
}
startActivity(intent);
}
});
春のダウンロードアクションは
文字列 mimetype = "application/x-msdownload";
response.setContentType(mimetype);
response.setHeader("fileName", fvo.getFileStreCours()+fvo.getStreFileNm());
setDisposition(fvo.getOrignlFileNm(), request, response);
response.setContentLength(fSize);
BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(uFile));
out = new BufferedOutputStream(response.getOutputStream());
FileCopyUtils.copy(in, out);
out.flush();
response.flushBuffer();
} catch (Exception ex) {
// Connection reset by peer: socket write error
log.debug("IGNORED: " + ex.getMessage());
} finally {
if (in != null) {
try {
in.close();
} catch (Exception ignore) {
log.debug("IGNORED: " + ignore.getMessage());
}
}
if (out != null) {
try {
out.close();
} catch (Exception ignore) {
log.debug("IGNORED: " + ignore.getMessage());
}
}
}
このファイルは NAS からダウンロードしています
しかし、アンドロイドはウェブの応答バッファにアクセスしていませんでした
Androidでは、0バイトのファイルにしました。
バッファにアクセスしてWebの応答バッファにファイルをダウンロードする方法は?
ps。Web サービスが URL を開くことを許可していないため、リダイレクトを使用できません