Created
September 13, 2013 14:36
-
-
Save axeda/6551557 to your computer and use it in GitHub Desktop.
Simple File Upload using the FileStore
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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