向大地震中去世的同胞致敬
今天要做的是一个可以执行下载的下载器,虽然据说安卓原生有Downloadmananger这种“方便”的下载器,但我个人还是更倾向于这种比较简单不那么难操作的东西
先上servlet端代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setHeader("Access-Control-Allow-Origin", "*"); response.setContentType("text/html;charset=UTF-8"); response.setHeader("content-type","text/html;charset=UTF-8"); String file=new String(request.getParameter("filename").getBytes("utf-8"),"utf-8"); File f = new File("C:\Users\14997\Desktop\nb\"+file); FileInputStream fis = new FileInputStream(f); String filename=URLEncoder.encode(f.getName(),"utf-8"); byte[] b = new byte[fis.available()]; fis.read(b); response.setHeader("Content-Disposition","attachment; filename="+filename+""); //获取响应报文输出流对象 ServletOutputStream out =response.getOutputStream(); //输出 out.write(b); out.flush(); out.close(); }
其实也是在向网页上推字节流
那么我们来写下安卓的下载:
public int downFile(String filename) { InputStream inputStream = null; File file = new File(vs.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)+"/"+filename); try { if (file.exists()) { return 1; } else { file.createNewFile(); String url = links[4]+filename; URL urll = new URL(url); HttpURLConnection urlConn = (HttpURLConnection) urll.openConnection(); inputStream = urlConn.getInputStream(); OutputStream output = new FileOutputStream(file); byte buffer [] = new byte[4 * 1024]; while((inputStream.read(buffer)) != -1){ output.write(buffer); } output.flush(); output.close(); File resultFile = file; if (resultFile == null) { return -1; } } } catch (Exception e) { e.printStackTrace(); file.delete(); return -1; } finally { try { inputStream.close(); } catch (Exception e) { e.printStackTrace(); } } return 0; }
这样就可以实现文件的下载了,只需将其放在对应的目录下即可通过该下载函数请求下载