今天来说说下载的Java实现 思路比较简单,客户端发送下载文件的请求,服务器接受请求,然后返回数据,浏览器接受数据。
直接上代码 最后说一下比较流行的扫面二维码下载
1)前台
一个a标签 点击触发事件
<a style="text-decoration:none;" href="${basePath}mapService/rest/download/downloadfile?type=android" class="android">
<img src="${basePath}skin_group_web/images/u1.png" onclick="downloadAndroid();">Android</a>
这是请求资源的Javascript代码
<script type="text/javascript">
function downloadAndroid(obj){
document.location.href="${basePath}mapService/rest/download/downloadfile?type=android";
}
</script>
2 后台 controller 层
package com.sgcc.evoms.map.charge;
/**
* <P>Description:(Android客户端的下载)</P>
* @version 1.0
* @author:
* @CreateDate:2015-8-20
* */
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/download")
public class DownloadFileController {
@RequestMapping(value = "/downloadfile")
public void download(HttpServletRequest request,
HttpServletResponse response) {
// 通过request参数filepath的方式来解析文件路径
// 没有将网络路径转换成本地路径,如果传递过来的是网络路径可以将文件路径修改一下
// 如果需求改变可以随时修改传递参数的方式
String type = request.getParameter("type");
String filepath = "";
if ("android".equals(type)) {
filepath = "/home/iovsp_jt_android.apk";// 测试文件
} else if ("ios".equals(type)) {
filepath = "/home/iovsp_jt_ios.apk";// 测试文件
}
int last = filepath.lastIndexOf("/");
String filename = filepath.substring(last + 1, filepath.length());
// 读取文件 输出网络文件
File file = new File(filepath);
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedInputStream bis = new BufferedInputStream(fis);
OutputStream os = null;
try {
os = response.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
// 设置header 下载 utf-8编码
try {
response.reset();// 删除HTML的空格
response.setContentType("application/octet-stream");
response.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode(filename, "UTF-8"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
//网络流里写数据
int len;
byte buffer[] = new byte[1024];
try {
while ((len = bis.read(buffer)) != -1) {
os.write(buffer, 0, len);
os.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
// 关闭输入流
try {
if (bis != null) {
bis.close();
}
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* 将网络路径转换为本地路径
*/
public String changePath(String filepath) {
String path = "";
return path;
}
}
运行代码的前提是安装了spring mvc。
3 扫描二维码下载 其实就是一个二维码生成的过程 把资源的请求地址URL生成二维码就可以了,百度一下二维码生成器,即可。