package org.molgenis.omicsconnect.services;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.util.HashMap;
import org.molgenis.framework.db.Database;
import org.molgenis.framework.db.DatabaseException;
import org.molgenis.framework.server.MolgenisContext;
import org.molgenis.framework.server.MolgenisRequest;
import org.molgenis.framework.server.MolgenisResponse;
import org.molgenis.framework.server.MolgenisService;
public class UploadFile implements MolgenisService
{
/**
* File upload service. Callable by Curl, RCurl, and other post services.
* Currently used to images, expandable to all other files.
*/
private MolgenisContext mc;
public UploadFile(MolgenisContext mc)
{
this.mc = mc;
}
@Override
public void handleRequest(MolgenisRequest request, MolgenisResponse response) throws ParseException,
DatabaseException, IOException
{
PrintWriter out = response.getResponse().getWriter();
response.getResponse().setContentType("text/plain");
Database db = null;
try
{
db = request.getDatabase();
String fileName = request.getString("name"); // the 'real' file name
String fileType = request.getString("type"); // file type, must
// correspond to a
// subclass of
// MolgenisFile
File fileContent = request.getFile("file"); // has a tmp name, so
// content only
HashMap<String, String> extraFields = new HashMap<String, String>();
for (int cIndex = 0; cIndex < request.size(); cIndex++)
{
String colName = request.getColName(cIndex);
if (colName.equals("name") || colName.equals("type") || colName.equals("file"))
{
// already handled
}
else
{
extraFields.put(colName, request.getString(colName));
}
}
PerformUpload.doUpload(db, true, fileName, fileType, fileContent, extraFields, false);
out.println("upload successful");
}
catch (Exception e)
{
out.println("Upload failed.");
out.println("Usage: see https://stat.ethz.ch/pipermail/bioconductor/2010-March/032550.html");
out.println("With minimal arguments: 'name', 'type', 'file', where:");
out.println("\tname = The file name plus extension to be put in the database.");
out.println("\ttype = The type of file, use 'MolgenisFile' for minimal upload. Corresponds to a subclass of MolgenisFile. Other examples: 'RScript', 'InvestigationFile', 'BinaryDataMatrix'.");
out.println("\tfile = The file (location) you wish to upload the contents of.");
out.println();
out.println("Example for RCurl when uploading an 'InvestigationFile':");
out.println("library(\"bitops\", lib.loc=\"/Users/joerivandervelde/libs\")");
out.println("library(\"RCurl\", lib.loc=\"/Users/joerivandervelde/libs\")");
out.println("uri <- \"http://mydomain.org/xqtl/uploadfile\");");
out.println("postForm(uri,");
out.println("\tname = \"harry.png\",");
out.println("\tInvestigation_name = \"ClusterDemo\",");
out.println("\ttype = \"InvestigationFile\",");
out.println("\tfile = fileUpload(filename = \"usr/home/danny/harry.png\"),");
out.println("\tstyle = \"HTTPPOST\"");
out.println(")");
out.println();
out.println("Example for commandline Curl when uploading an 'InvestigationFile':");
out.println("curl -F \"file=@/pictures/mypicture.jpg\" -F \"name=mypicture.jpg\" -F \"Investigation_name=ClusterDemo\" -F \"type=InvestigationFile\" http://mydomain.org/xqtl/uploadfile");
out.println();
e.printStackTrace(out);
}
finally
{
out.close();
}
}
}