Skip to content

Instantly share code, notes, and snippets.

@kjunichi
Created September 20, 2012 07:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kjunichi/3754477 to your computer and use it in GitHub Desktop.
Save kjunichi/3754477 to your computer and use it in GitHub Desktop.
Picture Upload Serer side javascript source for RingoJS runnning on Google App Engine
// forked from kjunichi's "Jsdo.itでサーバサイドJavaScript テンプレート" http://jsdo.it/kjunichi/ipadt
function convertArray(type, arr) {
var jArr = java.lang.reflect.Array.newInstance(type, arr.length);
for (var i = 0; i < arr.length; i++) {
if(arr[i]<0){
jArr[i]=0;
} else {
if(arr[i] > 127) {
jArr[i]= arr[i]-256;
} else {
jArr[i] = arr[i];
}
}
}
return jArr;
}
function jsdoitServerFunc(req) {
importPackage(com.google.appengine.repackaged.com.google.common.util);
var meta ='<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">';
var msg = '';
msg = msg + "<h2>test</h2>"+req.method;
msg = msg + "<p>"+req.queryString + "</p>";
if(req.method=="POST") {
var params = {};
//var rawPostData = req.input.read().decodeToString(req.charset || "utf-8");
var rawPostData = req.input.read().toByteArray();
var LF = String.fromCharCode(10);
var CR = String.fromCharCode(13);
var rawPostDataRow = rawPostData.split(10);
var isHeader = true;
var isFinish = false;
var boundaryStr = rawPostDataRow[0].split(13)[0];
var binPicData=[];
var picIndex=0;
var imageType;
for(var i = 1; i < rawPostDataRow.length; i++) {
// get image type
var line = rawPostDataRow[i].decodeToString();
if(line.lastIndexOf("Content-Type: ",0)==0) {
var tmpLine = line.split("/");
msg = msg + "<p>"+i+"Content : "+tmpLine[tmpLine.length-1]+"</p>";
imageType=tmpLine[tmpLine.length-1];
}
// is end
if(rawPostDataRow[i].lastIndexOf(boundaryStr,0)==0) {
msg = msg + "<p>"+i+": isFinish to true</p>";
isFinish = true;
}
//
if(isHeader==false && isFinish==false) {
// put bin data
var tmpData = rawPostDataRow[i];
for(var j = 0; j < tmpData.length; j++) {
var tmpVal = tmpData[j] ;
binPicData[picIndex++]=tmpVal;
}
binPicData[picIndex++]=10;
}
// is head end
if(rawPostDataRow[i].charCodeAt(0)==13) {
msg = msg + "<p>"+i+": isHead to false</p>";
isHeader = false;
}
}
msg=msg+"<img src="+"\"data:image/"+imageType+";base64,"
+Base64.encode(convertArray(java.lang.Byte.TYPE,binPicData))+"\">";
//+Base64.encode(binPicData)+"\">";
}
var res={};
res.status="200";
res.headers={};
res.headers['content-type']="text/html";
res.body=["<html><head>",meta,"</head><body>",msg,"</body></html>"];
return res;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment