Service used to upload files using HTTP REST multipart requests. It's main purpose is to act as a simple solution to backup storage. It supports automatic file deletion after customizable file age. Made to work with JWT security using JWK.
Service can act as a (backup) storage for any kind of data. Files are saved to local disk storage - base path is configurable.
(See property files.path
)
Data is managed by age - files older than n days are periodically deleted. (See property files.max-days-age
)
Scheduled time to run deletion process can be configured using cron expressions.
(See property files.deletion-cron-expression
) For example, to run deletion process every day at 2 AM:
files.deletion-cron-expression=0 0 2 1/1 * ?
Above cron expression is also set as default (if no property is defined).
All upload requests are traced to log files. Data is logged in JSON format. (See property trace.files.path
).
Example of trace info - saving file My-file.pdf to directory mydir:
2018-03-13_20:42:25.721 - {"file":"My-file.pdf","directory":"mydir"}
- Tracing can be enabled/disabled by adding
trace-enable
as active profile. (See propertyspring.profiles.active
) - Trace files are automatically rolled when file size exceeds 50MB. (See file
logback-spring.xml
)
Files can be uploaded using HTTP multipart requests. More specifically using API endpoint:
- POST /api/file/upload
Parameters:
- file - file to be uploaded
- directory - directory (under base path) to save file into
API documents via swagger UI can be accessed via /swagger-ui.html
For instance: http://localhost:8888/swagger-ui.html if you run the service locally on port 8888 that is set as default.
OAuth2 security is supported using JWT (Json Web Tokens). It can be enabled/disabled via spring profiles:
- no-auth - No security is enabled
- oauth2-auth - OAuth2 Security using JWT (See property
security.oauth2.resource.jwk.key-set-uri
)
- Download ( really? )
- Configure maven or use the bundled version inside a project
- Modify
application.properties
file - Build project via Maven (
mvn install
) - Run created jar via (for instance)
java -jar file-uploader-0.0.1-SNAPSHOT.jar
. You may want to run jar as a service or at least usenohup
All known Spring properties must/can be applied here (server.port
, spring.application.name
, ...) In addition to that,
service provides some additional configuration options:
- trace.files.path - Customize tracing log path to store tracing info ( default: trace )
- files.path - Customize files storage base path
- files.max-days-age - Customize max age for files (last modified time is used)
- spring.profiles.active - Enable/disable tracing by adding
trace-enable
as active profile
If by any chance you are using RestTemplate
to call REST API and do not have an actual file but it's rather already loaded as byte array ( byte[]
) ...
Following method will make multipart http request.
public void uploadFile(final byte[] data, final String uri, final String dir) {
RestTemplate restTemplate = restTemplatesFactory.get();
ByteArrayResource contentsAsResource = new ByteArrayResource(pdfDto.getData()) {
@Override
public String getFilename() { return "my_file_name"; }
};
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.add("name", "my_file_name"));
map.add("filename", "my_file_name");
map.add("file", data);
if (dir != null)
{
map.add("directory", dir);
}
restTemplate.postForObject(uri, map, ResponseEntity.class);
}