1、我们发送请求到服务器端通过response输出流将文件进行读取存储到客户端
一般情况下我们是弹出窗口让用户选择存储路径,如何实现默认存储到指定路径呢?
代码如下:
2、客户端发送请求:
2.1、获取文件名,获取指定文件名的response流
2.2、将response输出流包装到制定了文件下载路径的OutPut流中写到本地的设置路径下outputUrl
rpcServerUrl是服务器端的路径
@RequestMapping(value = "/receiveFilename", method = { RequestMethod.POST})
public Boolean receiveFilename(String filename) {
Boolean flag = false;
try {
//创建httpClient对象
HttpClient httpClient = new HttpClient();
//创建getMethod对象
GetMethod getMethod = new GetMethod(rpcServerUrl);
//封装参数
getMethod.setRequestHeader("fileName", URLEncoder.encode(filename,"UTF-8"));
//发送请求
httpClient.executeMethod(getMethod);
//创建接收文件的流
File file = new File(outputUrl++File.separator+filename);
OutputStream outputStream = new FileOutputStream(file);
//将responseBody截取并写入到指定文件路径下
outputStream.write(getMethod.getResponseBody());
outputStream.flush();
outputStream.close();
flag = true;
} catch (Exception e) {
e.printStackTrace();
flag = false;
}
return flag;
}
3、服务器端接收请求代码
读取服务器端文件,将服务器端文件写入到response的输出流中
@RequestMapping(value = "/sendUploadVoice")
public void sendUploadVoice(HttpServletResponse response,HttpServletRequest request) {
try {
//接收请求
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
//获取文件
String fileName = request.getHeader("fileName");
fileName= URLDecoder.decode(fileName,"UTF-8");
//获取文件输入流 localFileDir是服务端存储文件的路径
File file = new File(localFileDir+ File.separator + fileName);
response.setContentLength((int)file.length());
response.setHeader("Accept-Ranges", "bytes");
InputStream in = new BufferedInputStream(new FileInputStream(file), 4096);
OutputStream os = new BufferedOutputStream(response.getOutputStream());
byte[] bytes = new byte[4096];
int i = 0;
while ((i = in.read(bytes)) > 0) {
os.write(bytes, 0, i);
}
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}