请求方法由于频繁萃取文件内容,服务器内存被字符串占满,所以使用流的方式处理,因为流一旦被关闭就会释放其占用的资源,而字符串要等着GC回收
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import org.json.simple.JSONObject;
public class TestFile {
private static final String URL = "http://127.0.0.1/file/getFileContent";
public static void main(String[] args) throws IOException {
String get = httpRequest(URL, "GET", new HashMap<>());
System.err.println(get);
}
public static String httpRequest(String requestUrl, String requestMethod, Map requestParameters) throws IOException {
InputStream inputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
try {
URL url = new URL(requestUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);//需要用到输出流
conn.setDoInput(true);//需要用到输入流
conn.setRequestMethod(requestMethod);
conn.setRequestProperty("content-type", "text/html");//设置内容类型
// 使用输出流添加数据至请求体
if (requestParameters.size() != 0) {
String json = JSONObject.toJSONString(requestParameters);
OutputStream os = conn.getOutputStream();//获取输出流
os.write(json.getBytes());//写入
os.flush();
}
conn.connect();
// 读取服务器端返回的内容
inputStream = conn.getInputStream();
inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder buffer = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
buffer.append(line);
}
return buffer.toString();
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
assert inputStream != null;
inputStream.close();
assert inputStreamReader != null;
inputStreamReader.close();
assert bufferedReader != null;
bufferedReader.close();
}
}
}
返回内容
package com.demo.controller;
import com.demo.service.FileService;
import com.jfinal.aop.Inject;
import com.jfinal.core.Controller;
import com.jfinal.core.Path;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletResponse;
@Path("/file")
public class FileController extends Controller {
private static final String FILE_PATH = "D:\工作\档案相关文件\电子档案管理系统基本功能规定.pdf";
@Inject
FileService fileService;
public void getFileContent() throws IOException {
InputStream fileContext = null;
OutputStream outputStream = null;
try {
File file = new File(FILE_PATH);
fileContext = fileService.getFileContext(file);
HttpServletResponse response = getResponse();
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment;filename=" + file.getName());
outputStream = response.getOutputStream();
byte[] bis = new byte[1024];
while (-1 != fileContext.read(bis)) {
outputStream.write(bis);
}
renderNull();
} catch (Exception e) {
e.printStackTrace();
} finally {
assert fileContext != null;
fileContext.close();
assert outputStream != null;
outputStream.flush();
outputStream.close();
}
}
}



