Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
佳 邓
Gitlab4j Api
Commits
03d69b81
Commit
03d69b81
authored
Apr 14, 2018
by
Greg Messner
Browse files
Mods to support file upload (#171).
parent
f1a73832
Changes
3
Hide whitespace changes
Inline
Side-by-side
pom.xml
View file @
03d69b81
...
@@ -227,6 +227,12 @@
...
@@ -227,6 +227,12 @@
<artifactId>
jersey-apache-connector
</artifactId>
<artifactId>
jersey-apache-connector
</artifactId>
<version>
${jersey.version}
</version>
<version>
${jersey.version}
</version>
</dependency>
</dependency>
<dependency>
<groupId>
org.glassfish.jersey.media
</groupId>
<artifactId>
jersey-media-multipart
</artifactId>
<version>
${jersey.version}
</version>
</dependency>
<dependency>
<dependency>
<groupId>
javax.servlet
</groupId>
<groupId>
javax.servlet
</groupId>
<artifactId>
javax.servlet-api
</artifactId>
<artifactId>
javax.servlet-api
</artifactId>
...
...
src/main/java/org/gitlab4j/api/AbstractApi.java
View file @
03d69b81
package
org.gitlab4j.api
;
package
org.gitlab4j.api
;
import
java.io.File
;
import
java.net.URL
;
import
java.net.URL
;
import
java.net.URLEncoder
;
import
java.net.URLEncoder
;
...
@@ -147,7 +148,7 @@ public abstract class AbstractApi implements Constants {
...
@@ -147,7 +148,7 @@ public abstract class AbstractApi implements Constants {
* a ClientResponse instance with the data returned from the endpoint.
* a ClientResponse instance with the data returned from the endpoint.
*
*
* @param expectedStatus the HTTP status that should be returned from the server
* @param expectedStatus the HTTP status that should be returned from the server
* @param stream the StreamingOutput t
a
ht will be used for the POST data
* @param stream the StreamingOutput th
a
t will be used for the POST data
* @param mediaType the content-type for the streamed data
* @param mediaType the content-type for the streamed data
* @param pathArgs variable list of arguments used to build the URI
* @param pathArgs variable list of arguments used to build the URI
* @return a ClientResponse instance with the data returned from the endpoint
* @return a ClientResponse instance with the data returned from the endpoint
...
@@ -197,6 +198,46 @@ public abstract class AbstractApi implements Constants {
...
@@ -197,6 +198,46 @@ public abstract class AbstractApi implements Constants {
}
}
}
}
/**
* Perform a file upload with the specified File instance and path objects, returning
* a ClientResponse instance with the data returned from the endpoint.
*
* @param expectedStatus the HTTP status that should be returned from the server
* @param name the name for the form field that contains the file name
* @param fileToUpload a File instance pointing to the file to upload
* @param mediaType the content-type of the uploaded file, if null will be determined from fileToUpload
* @param pathArgs variable list of arguments used to build the URI
* @return a ClientResponse instance with the data returned from the endpoint
* @throws GitLabApiException if any exception occurs during execution
*/
protected
Response
upload
(
Response
.
Status
expectedStatus
,
String
name
,
File
fileToUpload
,
String
mediaType
,
Object
...
pathArgs
)
throws
GitLabApiException
{
try
{
return
validate
(
getApiClient
().
upload
(
name
,
fileToUpload
,
mediaType
,
pathArgs
),
expectedStatus
);
}
catch
(
Exception
e
)
{
throw
handle
(
e
);
}
}
/**
* Perform a file upload with the specified File instance and path objects, returning
* a ClientResponse instance with the data returned from the endpoint.
*
* @param expectedStatus the HTTP status that should be returned from the server
* @param name the name for the form field that contains the file name
* @param fileToUpload a File instance pointing to the file to upload
* @param mediaType the content-type of the uploaded file, if null will be determined from fileToUpload
* @param url the fully formed path to the GitLab API endpoint
* @return a ClientResponse instance with the data returned from the endpoint
* @throws GitLabApiException if any exception occurs during execution
*/
protected
Response
upload
(
Response
.
Status
expectedStatus
,
String
name
,
File
fileToUpload
,
String
mediaType
,
URL
url
)
throws
GitLabApiException
{
try
{
return
validate
(
getApiClient
().
upload
(
name
,
fileToUpload
,
mediaType
,
url
),
expectedStatus
);
}
catch
(
Exception
e
)
{
throw
handle
(
e
);
}
}
/**
/**
* Perform an HTTP PUT call with the specified form data and path objects, returning
* Perform an HTTP PUT call with the specified form data and path objects, returning
* a ClientResponse instance with the data returned from the endpoint.
* a ClientResponse instance with the data returned from the endpoint.
...
...
src/main/java/org/gitlab4j/api/GitLabApiClient.java
View file @
03d69b81
package
org.gitlab4j.api
;
package
org.gitlab4j.api
;
import
static
javax
.
ws
.
rs
.
core
.
MediaType
.
MULTIPART_FORM_DATA_TYPE
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.net.Socket
;
import
java.net.Socket
;
import
java.net.URL
;
import
java.net.URL
;
...
@@ -33,6 +36,11 @@ import org.gitlab4j.api.utils.JacksonJson;
...
@@ -33,6 +36,11 @@ import org.gitlab4j.api.utils.JacksonJson;
import
org.glassfish.jersey.apache.connector.ApacheConnectorProvider
;
import
org.glassfish.jersey.apache.connector.ApacheConnectorProvider
;
import
org.glassfish.jersey.client.ClientConfig
;
import
org.glassfish.jersey.client.ClientConfig
;
import
org.glassfish.jersey.client.ClientProperties
;
import
org.glassfish.jersey.client.ClientProperties
;
import
org.glassfish.jersey.media.multipart.FormDataMultiPart
;
import
org.glassfish.jersey.media.multipart.MultiPart
;
import
org.glassfish.jersey.media.multipart.MultiPartFeature
;
import
org.glassfish.jersey.media.multipart.file.FileDataBodyPart
;
/**
/**
* This class utilizes the Jersey client package to communicate with a GitLab API endpoint.
* This class utilizes the Jersey client package to communicate with a GitLab API endpoint.
...
@@ -224,6 +232,7 @@ public class GitLabApiClient {
...
@@ -224,6 +232,7 @@ public class GitLabApiClient {
}
}
clientConfig
.
register
(
JacksonJson
.
class
);
clientConfig
.
register
(
JacksonJson
.
class
);
clientConfig
.
register
(
MultiPartFeature
.
class
);
}
}
/**
/**
...
@@ -450,6 +459,45 @@ public class GitLabApiClient {
...
@@ -450,6 +459,45 @@ public class GitLabApiClient {
return
(
invocation
(
url
,
null
).
post
(
Entity
.
entity
(
stream
,
mediaType
)));
return
(
invocation
(
url
,
null
).
post
(
Entity
.
entity
(
stream
,
mediaType
)));
}
}
/**
* Perform a file upload as part of the , returning
* a ClientResponse instance with the data returned from the endpoint.
*
* @param name the name for the form field that contains the file name
* @param fileToUpload a File instance pointing to the file to upload
* @param mediaTypeString the content-type of the uploaded file, if null will be determined from fileToUpload
* @param pathArgs variable list of arguments used to build the URI
* @return a ClientResponse instance with the data returned from the endpoint
* @throws IOException if an error occurs while constructing the URL
*/
protected
Response
upload
(
String
name
,
File
fileToUpload
,
String
mediaTypeString
,
Object
...
pathArgs
)
throws
IOException
{
URL
url
=
getApiUrl
(
pathArgs
);
return
(
upload
(
name
,
fileToUpload
,
mediaTypeString
,
url
));
}
/**
* Perform a file upload using multipart/form-data, returning
* a ClientResponse instance with the data returned from the endpoint.
*
* @param name the name for the form field that contains the file name
* @param fileToUpload a File instance pointing to the file to upload
* @param mediaTypeString the content-type of the uploaded file, if null will be determined from fileToUpload
* @param url the fully formed path to the GitLab API endpoint
* @return a ClientResponse instance with the data returned from the endpoint
* @throws IOException if an error occurs while constructing the URL
*/
protected
Response
upload
(
String
name
,
File
fileToUpload
,
String
mediaTypeString
,
URL
url
)
throws
IOException
{
MediaType
mediaType
=
(
mediaTypeString
!=
null
?
MediaType
.
valueOf
(
mediaTypeString
)
:
null
);
try
(
MultiPart
multiPart
=
new
FormDataMultiPart
())
{
FileDataBodyPart
filePart
=
mediaType
!=
null
?
new
FileDataBodyPart
(
name
,
fileToUpload
,
mediaType
)
:
new
FileDataBodyPart
(
name
,
fileToUpload
);
multiPart
.
bodyPart
(
filePart
);
return
(
invocation
(
url
,
null
).
post
(
Entity
.
entity
(
multiPart
,
MULTIPART_FORM_DATA_TYPE
)));
}
}
/**
/**
* Perform an HTTP PUT call with the specified form data and path objects, returning
* Perform an HTTP PUT call with the specified form data and path objects, returning
* a ClientResponse instance with the data returned from the endpoint.
* a ClientResponse instance with the data returned from the endpoint.
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment