package com.zxz.pgdemo.controller;
import com.zxz.pgdemo.entity.User;
import com.zxz.pgdemo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.List;
import static reactor.core.publisher.Signal.complete;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
protected UserMapper userMapper;
@RequestMapping(value = "/findByName", method = RequestMethod.POST)
List<User> findByName(@RequestBody User user) {
return userMapper.findByName(user.getUserName());
}
void export(HttpServletRequest request, HttpServletResponse response) throws IOException {
ServletInputStream inputStream = request.getInputStream();
ServletOutputStream outputStream = response.getOutputStream();
AsyncContext asyncContext = request.startAsync();
InputStream is = new FileInputStream("");
outputStream.setWriteListener(new WriteListener() {
@Override
public void onWritePossible() throws IOException {
byte[] buffer = new byte[4096];
while(outputStream.isReady())
{
int len=is.read(buffer);
if (len<0)
{
asyncContext.complete();
return;
}
outputStream.write(buffer,0,len);
}
}
@Override
public void onError(Throwable throwable) {
asyncContext.complete();
try {
is.close();
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String info = request.getPathInfo();
response.setContentType(request.getServletContext().getMimeType(info));
File file = new File(request.getPathTranslated());
response.setContentLengthLong(file.length());
// Look for a file mapped buffer in the cache
ByteBuffer mapped = cache.get(path);
if (mapped == null) {
try (RandomAccessFile raf = new RandomAccessFile(file, "r")) {
ByteBuffer buf = raf.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, raf.length());
mapped = cache.putIfAbsent(path, buf);
if (mapped == null)
mapped = buf;
}
}
// write the buffer asynchronously
final ByteBuffer content = mapped.asReadOnlyBuffer();
final ServletOutputStream out = response.getOutputStream();
final AsyncContext async = request.startAsync();
out.setWriteListener(new WriteListener() {
public void onWritePossible() throws IOException {
while (out.isReady()) {
if (!content.hasRemaining()) {
async.complete();
return;
}
out.write(content);
}
}
@Override
public void onError(Throwable t) {
request.getServletContext().log("Async Error", t);
async.complete();
}
});
}
}
网友评论