下面列出了怎么用org.springframework.http.ContentDisposition的API类实例代码及写法,或者点击链接到github查看源代码。
private void parseRequest(HttpServletRequest request) {
try {
Collection<Part> parts = request.getParts();
this.multipartParameterNames = new LinkedHashSet<>(parts.size());
MultiValueMap<String, MultipartFile> files = new LinkedMultiValueMap<>(parts.size());
for (Part part : parts) {
String headerValue = part.getHeader(HttpHeaders.CONTENT_DISPOSITION);
ContentDisposition disposition = ContentDisposition.parse(headerValue);
String filename = disposition.getFilename();
if (filename != null) {
if (filename.startsWith("=?") && filename.endsWith("?=")) {
filename = MimeDelegate.decode(filename);
}
files.add(part.getName(), new StandardMultipartFile(part, filename));
}
else {
this.multipartParameterNames.add(part.getName());
}
}
setMultipartFiles(files);
}
catch (Throwable ex) {
handleParseFailure(ex);
}
}
private void parseRequest(HttpServletRequest request) {
try {
Collection<Part> parts = request.getParts();
this.multipartParameterNames = new LinkedHashSet<>(parts.size());
MultiValueMap<String, MultipartFile> files = new LinkedMultiValueMap<>(parts.size());
for (Part part : parts) {
String headerValue = part.getHeader(HttpHeaders.CONTENT_DISPOSITION);
ContentDisposition disposition = ContentDisposition.parse(headerValue);
String filename = disposition.getFilename();
if (filename != null) {
if (filename.startsWith("=?") && filename.endsWith("?=")) {
filename = MimeDelegate.decode(filename);
}
files.add(part.getName(), new StandardMultipartFile(part, filename));
}
else {
this.multipartParameterNames.add(part.getName());
}
}
setMultipartFiles(files);
}
catch (Throwable ex) {
handleParseFailure(ex);
}
}
@Test
public void shouldReadImageResource() throws IOException {
byte[] body = FileCopyUtils.copyToByteArray(getClass().getResourceAsStream("logo.jpg"));
MockHttpInputMessage inputMessage = new MockHttpInputMessage(body);
inputMessage.getHeaders().setContentType(MediaType.IMAGE_JPEG);
inputMessage.getHeaders().setContentDisposition(
ContentDisposition.builder("attachment").filename("yourlogo.jpg").build());
Resource actualResource = converter.read(Resource.class, inputMessage);
assertThat(FileCopyUtils.copyToByteArray(actualResource.getInputStream()), is(body));
assertEquals("yourlogo.jpg", actualResource.getFilename());
}
@Test // SPR-13443
public void shouldReadInputStreamResource() throws IOException {
try (InputStream body = getClass().getResourceAsStream("logo.jpg") ) {
MockHttpInputMessage inputMessage = new MockHttpInputMessage(body);
inputMessage.getHeaders().setContentType(MediaType.IMAGE_JPEG);
inputMessage.getHeaders().setContentDisposition(
ContentDisposition.builder("attachment").filename("yourlogo.jpg").build());
Resource actualResource = converter.read(InputStreamResource.class, inputMessage);
assertThat(actualResource, instanceOf(InputStreamResource.class));
assertThat(actualResource.getInputStream(), is(body));
assertEquals("yourlogo.jpg", actualResource.getFilename());
}
}
@Test
public void shouldReadImageResource() throws IOException {
byte[] body = FileCopyUtils.copyToByteArray(getClass().getResourceAsStream("logo.jpg"));
MockHttpInputMessage inputMessage = new MockHttpInputMessage(body);
inputMessage.getHeaders().setContentType(MediaType.IMAGE_JPEG);
inputMessage.getHeaders().setContentDisposition(
ContentDisposition.builder("attachment").filename("yourlogo.jpg").build());
Resource actualResource = converter.read(Resource.class, inputMessage);
assertThat(FileCopyUtils.copyToByteArray(actualResource.getInputStream()), is(body));
assertEquals("yourlogo.jpg", actualResource.getFilename());
}
@Test // SPR-13443
public void shouldReadInputStreamResource() throws IOException {
try (InputStream body = getClass().getResourceAsStream("logo.jpg") ) {
MockHttpInputMessage inputMessage = new MockHttpInputMessage(body);
inputMessage.getHeaders().setContentType(MediaType.IMAGE_JPEG);
inputMessage.getHeaders().setContentDisposition(
ContentDisposition.builder("attachment").filename("yourlogo.jpg").build());
Resource actualResource = converter.read(InputStreamResource.class, inputMessage);
assertThat(actualResource, instanceOf(InputStreamResource.class));
assertThat(actualResource.getInputStream(), is(body));
assertEquals("yourlogo.jpg", actualResource.getFilename());
}
}
private void addFileEntity(String name, MultiValueMap<String, Object> body, File file) throws Exception {
byte[] data = Files.readAllBytes(file.toPath());
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
ContentDisposition contentDispositionHeader = ContentDisposition.builder("form-data")
.name(name)
.filename(file.getName())
.build();
headers.add(HttpHeaders.CONTENT_DISPOSITION, contentDispositionHeader.toString());
HttpEntity<byte[]> fileEntity = new HttpEntity<>(data, headers);
body.add(name, fileEntity);
}
@GetMapping
public ResponseEntity<Resource> handleRequest(Principal p,
@RequestParam Optional<Integer> id,
@RequestParam(required = false) Integer playlist,
@RequestParam(required = false) Integer player,
@RequestParam(required = false, name = "i") List<Integer> indices,
ServletWebRequest swr) throws Exception {
User user = securityService.getUserByName(p.getName());
Player transferPlayer = playerService.getPlayer(swr.getRequest(), swr.getResponse(), false, false);
String defaultDownloadName = null;
ResponseDTO response = null;
Supplier<TransferStatus> statusSupplier = () -> statusService.createDownloadStatus(transferPlayer);
Consumer<TransferStatus> statusCloser = status -> {
statusService.removeDownloadStatus(status);
securityService.updateUserByteCounts(user, 0L, status.getBytesTransferred(), 0L);
LOG.info("Transferred {} bytes to user: {}, player: {}", status.getBytesTransferred(), user.getUsername(), transferPlayer);
};
MediaFile mediaFile = id.map(mediaFileService::getMediaFile).orElse(null);
if (mediaFile != null) {
if (!securityService.isFolderAccessAllowed(mediaFile, user.getUsername())) {
throw new AccessDeniedException("Access to file " + mediaFile.getId() + " is forbidden for user " + user.getUsername());
}
if (mediaFile.isFile()) {
response = prepareResponse(Collections.singletonList(mediaFile), null, statusSupplier, statusCloser, Collections.emptyList());
defaultDownloadName = mediaFile.getFile().getFileName().toString();
} else {
response = prepareResponse(mediaFileService.getChildrenOf(mediaFile, true, false, true), indices,
statusSupplier, statusCloser, indices == null ? Collections.singletonList(mediaFile.getCoverArtFile()) : Collections.emptyList());
defaultDownloadName = FilenameUtils.getBaseName(mediaFile.getPath()) + ".zip";
}
} else if (playlist != null) {
response = prepareResponse(playlistService.getFilesInPlaylist(playlist), indices, statusSupplier, statusCloser, Collections.emptyList());
defaultDownloadName = playlistService.getPlaylist(playlist).getName() + ".zip";
} else if (player != null) {
response = prepareResponse(transferPlayer.getPlayQueue().getFiles(), indices, statusSupplier, statusCloser, Collections.emptyList());
defaultDownloadName = "download.zip";
}
if (swr.checkNotModified(String.valueOf(response.getSize()), response.getChanged())) {
return null;
}
String filename = Optional.ofNullable(response.getProposedName()).orElse(defaultDownloadName);
HttpHeaders headers = new HttpHeaders();
headers.setContentDisposition(ContentDisposition.builder("attachment").filename(filename, StandardCharsets.UTF_8).build());
headers.setContentType(MediaType.parseMediaType(StringUtil.getMimeType(FilenameUtils.getExtension(filename))));
LOG.info("Downloading '{}' to {}", filename, player);
return ResponseEntity.ok().headers(headers).body(response.getResource());
}