Skip to content

Instantly share code, notes, and snippets.

@axeda
Created September 13, 2013 14:36
Show Gist options
  • Save axeda/6551557 to your computer and use it in GitHub Desktop.
Save axeda/6551557 to your computer and use it in GitHub Desktop.
Simple File Upload using the FileStore
import com.axeda.drm.sdk.Context
import com.axeda.drm.sdk.data.*
import com.axeda.drm.sdk.device.*
import com.axeda.drm.sdk.mobilelocation.CurrentMobileLocationFinder
import com.axeda.drm.sdk.mobilelocation.MobileLocation
import com.axeda.drm.sdk.mobilelocation.MobileLocationFinder
import com.axeda.sdk.v2.bridge.FileInfoBridge
import static com.axeda.sdk.v2.dsl.Bridges.*
import com.axeda.services.v2.ExecutionResult
import com.axeda.services.v2.FileInfo
import com.axeda.services.v2.FileInfoReference
import com.axeda.services.v2.FileUploadSession
import net.sf.json.JSONObject
import groovy.json.JsonBuilder
import net.sf.json.JSONArray
import com.axeda.drm.sdk.scripto.Request
import org.apache.commons.io.IOUtils
import org.apache.commons.lang.exception.ExceptionUtils
import com.axeda.common.sdk.id.Identifier
import com.axeda.services.v2.ExternalCredentialCriteria
import com.axeda.services.v2.NamedValue
import com.axeda.services.v2.ExtendedMap
import com.axeda.services.v2.ExtendedMapCriteria
import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*
import groovy.json.*
import javax.imageio.ImageIO;
import java.awt.RenderingHints
import java.awt.image.BufferedImage
import java.io.ByteArrayOutputStream;
/*
FileStore entry point to post and store files
*/
def contentType = "application/json"
final def serviceName = "SimpleStoreFile"
// Create a JSON Builder
def json = new JsonBuilder()
try {
Context CONTEXT = Context.getSDKContext()
def filesList = []
def datestring = new Date().time
InputStream inputStream
def reqbody = Request.body
// all of our Request Parameters are available here
def params = Request.parameters
def filename = Request?.headers?.'Content-Disposition' ?
Request?.headers?.'Content-Disposition' : "file___" + datestring + ".txt"
def filelabel = Request.parameters.filelabel ?: filename
def description = Request.parameters.description ?: filename
def contType = Request.headers?."content-type" ?: "image/jpeg"
def tag = Request.parameters.tag ?: ""
def encoded = Request.parameters.encoded?.toBoolean()
def host = Request.headers?.host
byte[] bytes
if (Request.inputStream?.available() > 0) {
// sending base64 encoded file to other instance
inputStream = Request.inputStream
bytes = IOUtils.toByteArray(Request.inputStream);
}
else if (Request.inputStream == null){
throw new Exception("$serviceName: Input Stream is null")
}
def outerMap = [:]
if (inputStream?.available() > 0) {
outerMap.byteCount = bytes.size()
FileInfoBridge fib = fileInfoBridge
FileInfo myImageFile = new FileInfo(filelabel: filelabel,
filename: filename,
filesize: bytes?.size(),
description: description,
tags: tag
)
myImageFile.contentType = contType
FileUploadSession fus = new FileUploadSession();
fus.files = [myImageFile]
ExecutionResult fer = fileUploadSessionBridge.create(fus);
myImageFile.sessionId = fer.succeeded.getAt(0)?.id
ExecutionResult fileInfoResult = fib.create(myImageFile)
if (fileInfoResult.successful) {
outerMap.fileInfoSave = "File Info Saved"
outerMap.sessionId = "File Upload SessionID: "+fer.succeeded.getAt(0)?.id
outerMap.fileInfoId = "FileInfo ID: "+fileInfoResult?.succeeded.getAt(0)?.id
ExecutionResult er = fib.saveOrUpdate(fileInfoResult.succeeded.getAt(0).id,new ByteArrayInputStream(bytes))
def fileInfoId = fileInfoResult?.succeeded.getAt(0)?.id
String url = "${host}/services/v1/rest/Scripto/execute/DownloadFile?fileId=${fileInfoId}"
if (er.successful) {
outerMap.url = url
} else {
outerMap.save = "false"
logger.info(logFailure(er,outerMap))
}
} else {
logger.info(logFailure(fileInfoResult, outerMap))
}
} else {
outerMap.bytesAvail = "No bytes found to upload"
}
filesList << outerMap
return ["Content-Type": contentType,"Content":JSONArray.fromObject(filesList).toString(2)]
} catch (Exception e) {
json.Exception(
description: "Execution Failed!!! An Exception was caught...",
stack: ExceptionUtils.getFullStackTrace(e)
)
return ["Content-Type": contentType, "Content": json.toPrettyString()]
}
private void logFailure(ExecutionResult fileInfoResult, LinkedHashMap outerMap) {
outerMap.message = fileInfoResult.failures.getAt(0)?.message
outerMap.source = fileInfoResult.failures.getAt(0)?.sourceOfFailure
outerMap.details = fileInfoResult.failures.getAt(0)?.details?.toString()
outerMap.fileInfoSave = "false"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment