use of org.apache.commons.fileupload.FileItem in project che by eclipse.
the class ProjectService method uploadZip.
private static Response uploadZip(VirtualFile parent, Iterator<FileItem> formData) throws ForbiddenException, ConflictException, ServerException {
try {
FileItem contentItem = null;
boolean overwrite = false;
boolean skipFirstLevel = false;
while (formData.hasNext()) {
FileItem item = formData.next();
if (!item.isFormField()) {
if (contentItem == null) {
contentItem = item;
} else {
throw new ServerException("More then one upload file is found but only one should be. ");
}
} else if ("overwrite".equals(item.getFieldName())) {
overwrite = Boolean.parseBoolean(item.getString().trim());
} else if ("skipFirstLevel".equals(item.getFieldName())) {
skipFirstLevel = Boolean.parseBoolean(item.getString().trim());
}
}
if (contentItem == null) {
throw new ServerException("Cannot find file for upload. ");
}
try {
importZip(parent, contentItem.getInputStream(), overwrite, skipFirstLevel);
} catch (IOException ioe) {
throw new ServerException(ioe.getMessage(), ioe);
}
return Response.ok("", MediaType.TEXT_HTML).build();
} catch (ForbiddenException | ConflictException | ServerException e) {
HtmlErrorFormatter.sendErrorAsHTML(e);
// never thrown
throw e;
}
}
use of org.apache.commons.fileupload.FileItem in project che by eclipse.
the class FactoryService method saveFactory.
@POST
@Consumes(MULTIPART_FORM_DATA)
@Produces(APPLICATION_JSON)
@ApiOperation(value = "Create a new factory based on configuration and factory images", notes = "The field 'factory' is required")
@ApiResponses({ @ApiResponse(code = 200, message = "Factory successfully created"), @ApiResponse(code = 400, message = "Missed required parameters, parameters are not valid"), @ApiResponse(code = 403, message = "The user does not have rights to create factory"), @ApiResponse(code = 409, message = "When factory with given name and creator already exists"), @ApiResponse(code = 500, message = "Internal server error occurred") })
public FactoryDto saveFactory(Iterator<FileItem> formData) throws ForbiddenException, ConflictException, BadRequestException, ServerException {
try {
final Set<FactoryImage> images = new HashSet<>();
FactoryDto factory = null;
while (formData.hasNext()) {
final FileItem item = formData.next();
switch(item.getFieldName()) {
case ("factory"):
{
try (InputStream factoryData = item.getInputStream()) {
factory = factoryBuilder.build(factoryData);
} catch (JsonSyntaxException ex) {
throw new BadRequestException("Invalid JSON value of the field 'factory' provided");
}
break;
}
case ("image"):
{
try (InputStream imageData = item.getInputStream()) {
final FactoryImage image = createImage(imageData, item.getContentType(), NameGenerator.generate(null, 16));
if (image.hasContent()) {
images.add(image);
}
}
break;
}
default:
}
}
requiredNotNull(factory, "factory configuration");
processDefaults(factory);
createValidator.validateOnCreate(factory);
return injectLinks(asDto(factoryManager.saveFactory(factory, images)), images);
} catch (IOException ioEx) {
throw new ServerException(ioEx.getLocalizedMessage(), ioEx);
}
}
use of org.apache.commons.fileupload.FileItem in project pinot by linkedin.
the class LLCSegmentCommit method uploadSegment.
boolean uploadSegment(final String instanceId, final String segmentNameStr) {
// 1/ Create a factory for disk-based file items
final DiskFileItemFactory factory = new DiskFileItemFactory();
// 2/ Create a new file upload handler based on the Restlet
// FileUpload extension that will parse Restlet requests and
// generates FileItems.
final RestletFileUpload upload = new RestletFileUpload(factory);
final List<FileItem> items;
try {
// The following statement blocks until the entire segment is read into memory.
items = upload.parseRequest(getRequest());
boolean found = false;
File dataFile = null;
for (final Iterator<FileItem> it = items.iterator(); it.hasNext() && !found; ) {
final FileItem fi = it.next();
if (fi.getFieldName() != null && fi.getFieldName().equals(segmentNameStr)) {
found = true;
dataFile = new File(tempDir, segmentNameStr);
fi.write(dataFile);
}
}
if (!found) {
LOGGER.error("Segment not included in request. Instance {}, segment {}", instanceId, segmentNameStr);
return false;
}
// We will not check for quota here. Instead, committed segments will count towards the quota of a
// table
LLCSegmentName segmentName = new LLCSegmentName(segmentNameStr);
final String rawTableName = segmentName.getTableName();
final File tableDir = new File(baseDataDir, rawTableName);
final File segmentFile = new File(tableDir, segmentNameStr);
synchronized (_pinotHelixResourceManager) {
if (segmentFile.exists()) {
LOGGER.warn("Segment file {} exists. Replacing with upload from {}", segmentNameStr, instanceId);
FileUtils.deleteQuietly(segmentFile);
}
FileUtils.moveFile(dataFile, segmentFile);
}
return true;
} catch (Exception e) {
LOGGER.error("File upload exception from instance {} for segment {}", instanceId, segmentNameStr, e);
}
return false;
}
use of org.apache.commons.fileupload.FileItem in project pinot by linkedin.
the class PinotSegmentUploadRestletResource method post.
@Override
@Post
public Representation post(Representation entity) {
Representation rep = null;
File tmpSegmentDir = null;
File dataFile = null;
try {
// 0/ Get upload type, if it's uri, then download it, otherwise, get the tar from the request.
Series headers = (Series) getRequestAttributes().get(RESTLET_HTTP_HEADERS);
String uploadTypeStr = headers.getFirstValue(FileUploadUtils.UPLOAD_TYPE);
FileUploadType uploadType = null;
try {
uploadType = (uploadTypeStr == null) ? FileUploadType.getDefaultUploadType() : FileUploadType.valueOf(uploadTypeStr);
} catch (Exception e) {
uploadType = FileUploadType.getDefaultUploadType();
}
String downloadURI = null;
boolean found = false;
switch(uploadType) {
case URI:
case JSON:
// Download segment from the given Uri
try {
downloadURI = getDownloadUri(uploadType, headers, entity);
} catch (Exception e) {
String errorMsg = String.format("Failed to get download Uri for upload file type: %s, with error %s", uploadType, e.getMessage());
LOGGER.warn(errorMsg);
JSONObject errorMsgInJson = getErrorMsgInJson(errorMsg);
ControllerRestApplication.getControllerMetrics().addMeteredGlobalValue(ControllerMeter.CONTROLLER_SEGMENT_UPLOAD_ERROR, 1L);
setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
return new StringRepresentation(errorMsgInJson.toJSONString(), MediaType.APPLICATION_JSON);
}
SegmentFetcher segmentFetcher = null;
// Get segmentFetcher based on uri parsed from download uri
try {
segmentFetcher = SegmentFetcherFactory.getSegmentFetcherBasedOnURI(downloadURI);
} catch (Exception e) {
String errorMsg = String.format("Failed to get SegmentFetcher from download Uri: %s", downloadURI);
LOGGER.warn(errorMsg);
JSONObject errorMsgInJson = getErrorMsgInJson(errorMsg);
ControllerRestApplication.getControllerMetrics().addMeteredGlobalValue(ControllerMeter.CONTROLLER_SEGMENT_UPLOAD_ERROR, 1L);
setStatus(Status.SERVER_ERROR_INTERNAL);
return new StringRepresentation(errorMsgInJson.toJSONString(), MediaType.APPLICATION_JSON);
}
// Download segment tar to local.
dataFile = new File(tempDir, "tmp-" + System.nanoTime());
try {
segmentFetcher.fetchSegmentToLocal(downloadURI, dataFile);
} catch (Exception e) {
String errorMsg = String.format("Failed to fetch segment tar from download Uri: %s to %s", downloadURI, dataFile.toString());
LOGGER.warn(errorMsg);
JSONObject errorMsgInJson = getErrorMsgInJson(errorMsg);
ControllerRestApplication.getControllerMetrics().addMeteredGlobalValue(ControllerMeter.CONTROLLER_SEGMENT_UPLOAD_ERROR, 1L);
setStatus(Status.SERVER_ERROR_INTERNAL);
return new StringRepresentation(errorMsgInJson.toJSONString(), MediaType.APPLICATION_JSON);
}
if (dataFile.exists() && dataFile.length() > 0) {
found = true;
}
break;
case TAR:
default:
// 1/ Create a factory for disk-based file items
final DiskFileItemFactory factory = new DiskFileItemFactory();
// 2/ Create a new file upload handler based on the Restlet
// FileUpload extension that will parse Restlet requests and
// generates FileItems.
final RestletFileUpload upload = new RestletFileUpload(factory);
final List<FileItem> items;
// 3/ Request is parsed by the handler which generates a
// list of FileItems
items = upload.parseRequest(getRequest());
for (FileItem fileItem : items) {
if (!found) {
if (fileItem.getFieldName() != null) {
found = true;
dataFile = new File(tempDir, fileItem.getFieldName());
fileItem.write(dataFile);
}
} else {
LOGGER.warn("Got extra file item while pushing segments: " + fileItem.getFieldName());
}
// TODO: remove the try-catch after verifying it will not throw any exception
try {
// Remove the temp file
// When the file is copied to instead of renamed to the new file, the temp file might be left in the dir
fileItem.delete();
} catch (Exception e) {
LOGGER.error("Caught exception while deleting the temp file, should not reach here", e);
}
}
}
// back to the client.
if (found) {
// Create a new representation based on disk file.
// The content is arbitrarily sent as plain text.
rep = new StringRepresentation(dataFile + " sucessfully uploaded", MediaType.TEXT_PLAIN);
tmpSegmentDir = new File(tempUntarredPath, dataFile.getName() + "-" + _controllerConf.getControllerHost() + "_" + _controllerConf.getControllerPort() + "-" + System.currentTimeMillis());
LOGGER.info("Untar segment to temp dir: " + tmpSegmentDir);
if (tmpSegmentDir.exists()) {
FileUtils.deleteDirectory(tmpSegmentDir);
}
if (!tmpSegmentDir.exists()) {
tmpSegmentDir.mkdirs();
}
// While there is TarGzCompressionUtils.unTarOneFile, we use unTar here to unpack all files
// in the segment in order to ensure the segment is not corrupted
TarGzCompressionUtils.unTar(dataFile, tmpSegmentDir);
File segmentFile = tmpSegmentDir.listFiles()[0];
String clientIpAddress = getClientInfo().getAddress();
String clientAddress = InetAddress.getByName(clientIpAddress).getHostName();
LOGGER.info("Processing upload request for segment '{}' from client '{}'", segmentFile.getName(), clientAddress);
return uploadSegment(segmentFile, dataFile, downloadURI);
} else {
// Some problem occurs, sent back a simple line of text.
String errorMsg = "No file was uploaded";
LOGGER.warn(errorMsg);
JSONObject errorMsgInJson = getErrorMsgInJson(errorMsg);
rep = new StringRepresentation(errorMsgInJson.toJSONString(), MediaType.APPLICATION_JSON);
ControllerRestApplication.getControllerMetrics().addMeteredGlobalValue(ControllerMeter.CONTROLLER_SEGMENT_UPLOAD_ERROR, 1L);
setStatus(Status.SERVER_ERROR_INTERNAL);
}
} catch (final Exception e) {
rep = exceptionToStringRepresentation(e);
LOGGER.error("Caught exception in file upload", e);
ControllerRestApplication.getControllerMetrics().addMeteredGlobalValue(ControllerMeter.CONTROLLER_SEGMENT_UPLOAD_ERROR, 1L);
setStatus(Status.SERVER_ERROR_INTERNAL);
} finally {
if ((tmpSegmentDir != null) && tmpSegmentDir.exists()) {
try {
FileUtils.deleteDirectory(tmpSegmentDir);
} catch (final IOException e) {
LOGGER.error("Caught exception in file upload", e);
ControllerRestApplication.getControllerMetrics().addMeteredGlobalValue(ControllerMeter.CONTROLLER_SEGMENT_UPLOAD_ERROR, 1L);
setStatus(Status.SERVER_ERROR_INTERNAL);
}
}
if ((dataFile != null) && dataFile.exists()) {
FileUtils.deleteQuietly(dataFile);
}
}
return rep;
}
use of org.apache.commons.fileupload.FileItem in project eweb4j-framework by laiweiwei.
the class UploadUtil method handleUpload.
public static void handleUpload(Context context) throws Exception {
ConfigBean cb = (ConfigBean) SingleBeanCache.get(ConfigBean.class.getName());
UploadConfigBean ucb = cb.getMvc().getUpload();
String tmpDir = ucb.getTmp();
int memoryMax = CommonUtil.strToInt(CommonUtil.parseFileSize(ucb.getMaxMemorySize()) + "");
long sizeMax = CommonUtil.parseFileSize(ucb.getMaxRequestSize());
if (tmpDir.trim().length() == 0)
tmpDir = "${RootPath}" + File.separator + "WEB-INF" + File.separator + "tmp";
tmpDir = tmpDir.replace("${RootPath}", ConfigConstant.ROOT_PATH);
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(memoryMax);
factory.setRepository(new File(tmpDir));
ServletFileUpload _upload = new ServletFileUpload(factory);
if (!_upload.isMultipartContent(context.getRequest()))
return;
_upload.setSizeMax(sizeMax);
try {
List<FileItem> items = _upload.parseRequest(context.getRequest());
Iterator<FileItem> it = items.iterator();
while (it.hasNext()) {
FileItem item = it.next();
String fieldName = item.getFieldName();
if (item.isFormField()) {
String value = item.getString();
context.getQueryParamMap().put(fieldName, new String[] { value });
} else {
String fileName = item.getName();
if (fileName == null || fileName.trim().length() == 0)
continue;
String stamp = CommonUtil.getNowTime("yyyyMMddHHmmss");
File tmpFile = new File(tmpDir + File.separator + stamp + "_" + fileName);
item.write(tmpFile);
UploadFile uploadFile = new UploadFile(tmpFile, fileName, fieldName, item.getSize(), item.getContentType());
if (context.getUploadMap().containsKey(fieldName)) {
context.getUploadMap().get(fieldName).add(uploadFile);
} else {
List<UploadFile> uploads = new ArrayList<UploadFile>();
uploads.add(uploadFile);
context.getUploadMap().put(fieldName, uploads);
}
}
}
} catch (InvalidContentTypeException e) {
throw new Exception("upload file error", e);
}
}
Aggregations