Java源码示例:org.glassfish.jersey.media.multipart.file.StreamDataBodyPart
示例1
@Override
public String uploadFile(InputStream inputStream) {
MultiPart multiPart = new MultiPart();
BodyPart filePart = new StreamDataBodyPart("file", inputStream, "file");
multiPart.bodyPart(filePart);
return runRetryableBlock((SchemaRegistryTargets targets) -> {
try {
return login.doAction(new PrivilegedAction<String>() {
@Override
public String run() {
return targets.filesTarget.request()
.post(Entity.entity(multiPart, MediaType.MULTIPART_FORM_DATA), String.class);
}
});
} catch (LoginException | ProcessingException e) {
throw new RegistryRetryableException(e);
}
});
}
示例2
@Test
void multiPartFormDataAndSimulatedFileUpload() throws IOException {
final MultiPart multiPart = new MultiPart();
multiPart.setMediaType(MULTIPART_FORM_DATA_TYPE);
target("testws/testPostForm")
.request()
.header("Ignore", true)
.post(entity(multiPart.bodyPart(new StreamDataBodyPart("testFileFormField",
new ByteArrayInputStream("I am text file content".getBytes(UTF_8)),
"testUploadedFilename",
TEXT_PLAIN_TYPE
))
.bodyPart(new FormDataBodyPart("name", "[email protected]#$%"))
.bodyPart(new FormDataBodyPart("age", "-99")), multiPart.getMediaType()),
String.class
);
final RoundTrip roundTrip = getRoundTrip();
assertEquals("", roundTrip.getClientRequest().getBodyAsString());
assertEquals("", roundTrip.getClientResponse().getBodyAsString());
assertEquals("", roundTrip.getServerRequest().getBodyAsString());
assertEquals("", roundTrip.getServerResponse().getBodyAsString());
}
示例3
@Test
void multiPartFormDataAndSimulatedFileUpload() throws IOException {
final MultiPart multiPart = new MultiPart();
multiPart.setMediaType(MULTIPART_FORM_DATA_TYPE);
target("testws/testPostForm")
.request()
.header("Ignore", true)
.post(entity(multiPart.bodyPart(new StreamDataBodyPart("testFileFormField",
new ByteArrayInputStream("I am text file content".getBytes(UTF_8)),
"testUploadedFilename",
TEXT_PLAIN_TYPE
))
.bodyPart(new FormDataBodyPart("name", "[email protected]#$%"))
.bodyPart(new FormDataBodyPart("age", "-99")), multiPart.getMediaType()),
String.class
);
final RoundTrip roundTrip = getRoundTrip();
assertEquals("", roundTrip.getClientRequest().getBodyAsString());
assertEquals("", roundTrip.getClientResponse().getBodyAsString());
assertEquals("", roundTrip.getServerRequest().getBodyAsString());
assertEquals("", roundTrip.getServerResponse().getBodyAsString());
}
示例4
protected final Response getFormPostResponse(String data,
String endpoint,
Class<? extends OutputStream> compressingClass,
String encoding) throws IOException {
byte[] bytes;
if (compressingClass == null) {
bytes = data.getBytes(StandardCharsets.UTF_8);
} else {
bytes = compress(data, compressingClass);
}
MediaType type =
encoding == null ? MediaType.TEXT_PLAIN_TYPE : new MediaType("application", encoding);
InputStream in = new ByteArrayInputStream(bytes);
StreamDataBodyPart filePart = new StreamDataBodyPart("data", in, "data", type);
try (MultiPart multiPart = new MultiPart(MediaType.MULTIPART_FORM_DATA_TYPE)) {
multiPart.getBodyParts().add(filePart);
return target(endpoint).request().post(
Entity.entity(multiPart, MediaType.MULTIPART_FORM_DATA_TYPE));
}
}
示例5
private Response upload(String endpoint, Iterable<String> targets, String path, String fileName, byte[] content) throws IOException {
try (ByteArrayInputStream inputStream = new ByteArrayInputStream(content)) {
StreamDataBodyPart streamDataBodyPart = new StreamDataBodyPart("file", inputStream, fileName);
try (FormDataMultiPart multiPart = new FormDataMultiPart()) {
try (FormDataMultiPart pathField = multiPart.field("path", path)) {
try (FormDataMultiPart targetsField = pathField.field("targets", String.join(",", targets))) {
try (MultiPart bodyPart = targetsField.bodyPart(streamDataBodyPart)) {
MediaType contentType = MediaType.MULTIPART_FORM_DATA_TYPE;
contentType = Boundary.addBoundary(contentType);
String signature = PkiUtil.generateSignature(signatureKey, content);
return saltTarget.path(endpoint).request().header(SIGN_HEADER, signature).post(Entity.entity(bodyPart, contentType));
}
}
}
}
}
}
示例6
@Override
public String uploadFile(InputStream inputStream) {
MultiPart multiPart = new MultiPart();
BodyPart filePart = new StreamDataBodyPart("file", inputStream, "file");
multiPart.bodyPart(filePart);
try {
return login.doAction(new PrivilegedAction<String>() {
@Override
public String run() {
return currentSchemaRegistryTargets().filesTarget.request()
.post(Entity.entity(multiPart, MediaType.MULTIPART_FORM_DATA), String.class);
}
});
} catch (LoginException e) {
throw new RegistryRetryableException(e);
}
}
示例7
@Override
public Entity getEntity(List<MultiPartItem> items, String mediaType) {
MultiPart multiPart = new MultiPart();
for (MultiPartItem item : items) {
if (item.getValue() == null || item.getValue().isNull()) {
continue;
}
String name = item.getName();
String filename = item.getFilename();
ScriptValue sv = item.getValue();
String ct = item.getContentType();
if (ct == null) {
ct = HttpUtils.getContentType(sv);
}
MediaType itemType = MediaType.valueOf(ct);
if (name == null) { // most likely multipart/mixed
BodyPart bp = new BodyPart().entity(sv.getAsString()).type(itemType);
multiPart.bodyPart(bp);
} else if (filename != null) {
StreamDataBodyPart part = new StreamDataBodyPart(name, sv.getAsStream(), filename, itemType);
multiPart.bodyPart(part);
} else {
multiPart.bodyPart(new FormDataBodyPart(name, sv.getAsString(), itemType));
}
}
return Entity.entity(multiPart, mediaType);
}
示例8
@Override
public BundleVersion create(final String bucketId, final BundleType bundleType, final InputStream bundleContentStream, final String sha256)
throws IOException, NiFiRegistryException {
if (StringUtils.isBlank(bucketId)) {
throw new IllegalArgumentException("Bucket id cannot be null or blank");
}
if (bundleType == null) {
throw new IllegalArgumentException("Bundle type cannot be null");
}
if (bundleContentStream == null) {
throw new IllegalArgumentException("Bundle content cannot be null");
}
return executeAction("Error creating extension bundle version", () -> {
final WebTarget target = bucketExtensionBundlesTarget
.path("{bundleType}")
.resolveTemplate("bucketId", bucketId)
.resolveTemplate("bundleType", bundleType.toString());
final StreamDataBodyPart streamBodyPart = new StreamDataBodyPart("file", bundleContentStream);
final FormDataMultiPart multipart = new FormDataMultiPart();
multipart.bodyPart(streamBodyPart);
if (!StringUtils.isBlank(sha256)) {
multipart.field("sha256", sha256);
}
return getRequestBuilder(target)
.post(
Entity.entity(multipart, multipart.getMediaType()),
BundleVersion.class
);
});
}
示例9
public SchemaIdVersion uploadSchemaVersion(final String schemaBranchName,
final String schemaName,
final String description,
final InputStream schemaVersionInputStream)
throws InvalidSchemaException, IncompatibleSchemaException, SchemaNotFoundException, SchemaBranchNotFoundException {
SchemaMetadataInfo schemaMetadataInfo = getSchemaMetadataInfo(schemaName);
if (schemaMetadataInfo == null) {
throw new SchemaNotFoundException("Schema with name " + schemaName + " not found");
}
StreamDataBodyPart streamDataBodyPart = new StreamDataBodyPart("file", schemaVersionInputStream);
Response response = runRetryableBlock((SchemaRegistryTargets targets) -> {
WebTarget target = targets.schemasTarget.path(schemaName).path("/versions/upload").queryParam("branch", schemaBranchName);
MultiPart multipartEntity =
new FormDataMultiPart()
.field("description", description, MediaType.APPLICATION_JSON_TYPE)
.bodyPart(streamDataBodyPart);
Entity<MultiPart> multiPartEntity = Entity.entity(multipartEntity, MediaType.MULTIPART_FORM_DATA);
try {
return login.doAction(new PrivilegedAction<Response>() {
@Override
public Response run() {
return target.request().post(multiPartEntity, Response.class);
}
});
} catch (LoginException | ProcessingException e) {
throw new RegistryRetryableException(e);
}
});
return handleSchemaIdVersionResponse(schemaMetadataInfo, response);
}
示例10
public void shouldUploadApiMedia() {
StreamDataBodyPart filePart = new StreamDataBodyPart("file",
this.getClass().getResourceAsStream("/media/logo.svg"), "logo.svg", MediaType.valueOf("image/svg+xml"));
final MultiPart multiPart = new MultiPart(MediaType.MULTIPART_FORM_DATA_TYPE);
multiPart.bodyPart(filePart);
final Response response = target(API + "/media/upload").request().post(entity(multiPart, multiPart.getMediaType()));
assertEquals(OK_200, response.getStatus());
}
示例11
public void shouldNotUploadApiMediaBecauseWrongMediaType() {
StreamDataBodyPart filePart = new StreamDataBodyPart("file",
this.getClass().getResourceAsStream("/media/logo.svg"), "logo.svg", MediaType.APPLICATION_OCTET_STREAM_TYPE);
final MultiPart multiPart = new MultiPart(MediaType.MULTIPART_FORM_DATA_TYPE);
multiPart.bodyPart(filePart);
final Response response = target(API + "/media/upload").request().post(entity(multiPart, multiPart.getMediaType()));
assertEquals(BAD_REQUEST_400, response.getStatus());
final String message = response.readEntity(String.class);
assertTrue(message, message.contains("File format unauthorized"));
}
示例12
private void shouldNotUpdateApiMediaBecauseXSS(final String fileName) {
final StreamDataBodyPart filePart = new StreamDataBodyPart("file",
this.getClass().getResourceAsStream("/media/" + fileName), fileName, IMAGE_SVG_XML_TYPE);
final MultiPart multiPart = new MultiPart(MediaType.MULTIPART_FORM_DATA_TYPE);
multiPart.bodyPart(filePart);
final Response response = target(API + "/media/upload").request().post(entity(multiPart, multiPart.getMediaType()));
assertEquals(BAD_REQUEST_400, response.getStatus());
final String message = response.readEntity(String.class);
assertTrue(message, message.contains("Invalid image format"));
}
示例13
public JSONObject createMedia(final YaasAwareParameters yaasAware, final InputStream fileInputStream,
final AccessToken token) {
final FormDataMultiPart multiPart = new FormDataMultiPart();
multiPart.bodyPart(new StreamDataBodyPart("file", fileInputStream));
final JSONObject payload = new JSONObject();
payload.put("Content-Type", MediaType.MULTIPART_FORM_DATA);
final Response responseUrl = mediaClient // get URL
.$public()
.files()
.preparePost()
.withAuthorization(token.toAuthorizationHeaderValue())
.withPayload(payload.toString())
.execute();
if (responseUrl.getStatus() == Response.Status.OK.getStatusCode()) {
final JSONObject mediaCreate = new JSONObject(responseUrl.readEntity(String.class));
final String uploadLink = mediaCreate.getString("uploadLink");
final String uploadEndpointId = mediaCreate.getString("id");
final WebTarget webTarget = ClientBuilder.newClient().target(uploadLink);
final Response responsePut = webTarget.request() // put media
.put(Entity.entity(fileInputStream, MediaType.MULTIPART_FORM_DATA));
if (responsePut.getStatus() == Response.Status.OK.getStatusCode()) {
final Response responseCommit = mediaClient.$public().files().fileId(uploadEndpointId).commit() // commit
.preparePost().withAuthorization(token.toAuthorizationHeaderValue()).execute(); // media
if (responseCommit.getStatus() == Response.Status.OK.getStatusCode()) {
final JSONObject mediaCommited = new JSONObject(responseCommit.readEntity(String.class));
return mediaCommited;
}
}
}
throw ErrorHandler.resolveErrorResponse(responseUrl, token);
}
示例14
public SchemaIdVersion uploadSchemaVersion(final String schemaBranchName,
final String schemaName,
final String description,
final InputStream schemaVersionInputStream)
throws InvalidSchemaException, IncompatibleSchemaException, SchemaNotFoundException, SchemaBranchNotFoundException {
SchemaMetadataInfo schemaMetadataInfo = getSchemaMetadataInfo(schemaName);
if (schemaMetadataInfo == null) {
throw new SchemaNotFoundException("Schema with name " + schemaName + " not found");
}
StreamDataBodyPart streamDataBodyPart = new StreamDataBodyPart("file", schemaVersionInputStream);
WebTarget target = currentSchemaRegistryTargets().schemasTarget.path(schemaName).path("/versions/upload").queryParam("branch",schemaBranchName);
MultiPart multipartEntity =
new FormDataMultiPart()
.field("description", description, MediaType.APPLICATION_JSON_TYPE)
.bodyPart(streamDataBodyPart);
Entity<MultiPart> multiPartEntity = Entity.entity(multipartEntity, MediaType.MULTIPART_FORM_DATA);
Response response = null;
try {
response = login.doAction(new PrivilegedAction<Response>() {
@Override
public Response run() {
return target.request().post(multiPartEntity, Response.class);
}
});
} catch (LoginException e) {
throw new RegistryRetryableException(e);
}
return handleSchemaIdVersionResponse(schemaMetadataInfo, response);
}
示例15
@Test
void multiPartFormDataAndSimulatedFileUpload() throws IOException {
final MultiPart multiPart = new MultiPart();
multiPart.setMediaType(MULTIPART_FORM_DATA_TYPE);
final String result = target("testws/testPostForm").request().post(
entity(multiPart.bodyPart(new StreamDataBodyPart("testFileFormField",
new ByteArrayInputStream("I am text file content".getBytes(UTF_8)),
"testUploadedFilename",
TEXT_PLAIN_TYPE
))
.bodyPart(new FormDataBodyPart("name", "[email protected]#$%"))
.bodyPart(new FormDataBodyPart("age", "-99")), multiPart.getMediaType()),
String.class
);
final RoundTrip roundTrip = getRoundTrip();
final HttpRequest clientRequest = roundTrip.getClientRequest();
final HttpResponse clientResponse = roundTrip.getClientResponse();
final HttpRequest serverRequest = roundTrip.getServerRequest();
final HttpResponse serverResponse = roundTrip.getServerResponse();
assertEquals("name was [email protected]#$% age was -99 file was I am text file content", result);
// client request
assertEquals("HTTP/1.1", clientRequest.getProtocolVersion());
assertEquals("POST", clientRequest.getMethod());
assertEquals(LOCAL, clientRequest.getOrigin());
assertEquals("localhost", clientRequest.getRemote());
assertEquals("http", clientRequest.getScheme());
assertEquals("localhost", clientRequest.getHost());
assertEquals(Optional.of(this.getPort()), clientRequest.getPort());
assertEquals("/testws/testPostForm", clientRequest.getPath());
assertEquals("", clientRequest.getQuery());
assertNotEquals("", clientRequest.getBodyAsString());
// client response
assertEquals("HTTP/1.1", clientResponse.getProtocolVersion());
assertEquals("text/plain", clientResponse.getHeaders().get("Content-type").get(0));
assertEquals("67", clientResponse.getHeaders().get("Content-length").get(0));
assertEquals("name was [email protected]#$% age was -99 file was I am text file content",
clientResponse.getBodyAsString());
assertEquals("text/plain", clientResponse.getContentType());
assertEquals("HTTP/1.1", clientResponse.getProtocolVersion());
assertEquals(200, clientResponse.getStatus());
assertEquals(REMOTE, clientResponse.getOrigin());
assertEquals(UTF_8, clientResponse.getCharset());
// server request
assertEquals("HTTP/1.1", serverRequest.getProtocolVersion());
assertEquals("POST", serverRequest.getMethod());
assertEquals(REMOTE, serverRequest.getOrigin());
assertEquals("localhost:" + this.getPort(), serverRequest.getRemote());
assertEquals("http", serverRequest.getScheme());
assertEquals("localhost", serverRequest.getHost());
assertEquals(Optional.of(this.getPort()), serverRequest.getPort());
assertEquals("/testws/testPostForm", serverRequest.getPath());
assertEquals("", serverRequest.getQuery());
assertThat("serverRequest userAgent", serverRequest.getHeaders().get("User-Agent").get(0),
containsString("Jersey"));
assertNotEquals("", serverRequest.getBodyAsString());
// server response
assertEquals("HTTP/1.1", serverResponse.getProtocolVersion());
assertEquals("text/plain", serverResponse.getHeaders().get("Content-type").get(0));
assertEquals("name was [email protected]#$% age was -99 file was I am text file content",
serverResponse.getBodyAsString());
assertEquals("text/plain", serverResponse.getContentType());
assertEquals("HTTP/1.1", serverResponse.getProtocolVersion());
assertEquals(200, serverResponse.getStatus());
assertEquals(LOCAL, serverResponse.getOrigin());
assertEquals(UTF_8, serverResponse.getCharset());
}
示例16
@Test
public void fileTooLargeShouldResultInError() throws Exception {
this.waitForQueueDrainAndRefreshIndex();
// set max file size down to 6mb
Map<String, String> props = new HashMap<String, String>();
props.put( "usergrid.binary.max-size-mb", "6" );
pathResource( "testproperties" ).post( props );
try {
// upload a file larger than 6mb
final StreamDataBodyPart part = new StreamDataBodyPart(
"file", getClass().getResourceAsStream( "/ship-larger-than-6mb.gif" ), "ship");
final MultiPart multipart = new FormDataMultiPart().bodyPart( part );
ApiResponse postResponse = pathResource( getOrgAppPath( "bars" ) ).post( multipart );
UUID assetId = postResponse.getEntities().get(0).getUuid();
String errorMessage = null;
logger.info( "Waiting for upload to finish..." );
Thread.sleep( 2000 );
// attempt to get asset entity, it should contain error
ApiResponse getResponse = pathResource( getOrgAppPath( "bars/" +assetId ) ).get( ApiResponse.class );
Map<String, Object> fileMetadata = (Map<String, Object>)getResponse.getEntities().get(0).get("file-metadata");
assertTrue( fileMetadata.get( "error" ).toString().startsWith( "Asset size " ) );
} finally {
// set max upload size back to default 25mb
props.put( "usergrid.binary.max-size-mb", "25" );
pathResource( "testproperties" ).post( props );
}
}
示例17
/**
* Adds an attachment from a {@link InputStream}.
*
* @param is an stream to read the attachment
* @return this builder
*/
public MultipartBuilder attachment(InputStream is) {
return bodyPart(new StreamDataBodyPart(ATTACHMENT_NAME, is));
}
示例18
/**
* Adds a named attachment.
*
* @param is an stream to read the attachment
* @param filename the filename to give to the attachment
* @return this builder
*/
public MultipartBuilder attachment(InputStream is, String filename) {
return bodyPart(new StreamDataBodyPart(ATTACHMENT_NAME, is, filename));
}
示例19
/**
* Adds a named attachment with a custom MIME media type.
*
* @param is an stream to read the attachment
* @param filename the filename to give to the attachment
* @param mediaType the media type of the attachment
* @return this builder
*/
public MultipartBuilder attachment(InputStream is, String filename,
MediaType mediaType) {
return bodyPart(new StreamDataBodyPart(ATTACHMENT_NAME, is, filename,
mediaType));
}
示例20
/**
* Adds an attachment directly by content.
*
* @param content the content of the attachment
* @param filename the filename of the attachment
* @return this builder
*/
public MultipartBuilder attachment(String content, String filename) {
ByteArrayInputStream is = new ByteArrayInputStream(content.getBytes());
return bodyPart(new StreamDataBodyPart(ATTACHMENT_NAME, is, filename));
}
示例21
/**
* Adds a named inline attachment.
*
* @param is an stream to read the attachment
* @param cidName the name to give to the attachment as referenced by the HTML email body
* i.e. use cidName sample-image.png for the below example
* <p>
* <img src="cid:sample-image.png" alt="sample">
* </p>
* @return this builder
*/
public MultipartBuilder inline(InputStream is, String cidName) {
return bodyPart(new StreamDataBodyPart("inline", is, cidName));
}