X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fservlet%2FServletModuleUploadedMedia.java;h=4b16869936a0471b02af3b5b8998961c622c6508;hb=77b8f79d3873d20aa10bb775e03047cd6a9de0bf;hp=fd662213bdf6572e5c266909f295be9e9628ee34;hpb=c03c0edfaadccc3f30ca41bf34c8730776d5250b;p=mir.git diff --git a/source/mircoders/servlet/ServletModuleUploadedMedia.java b/source/mircoders/servlet/ServletModuleUploadedMedia.java index fd662213..4b168699 100755 --- a/source/mircoders/servlet/ServletModuleUploadedMedia.java +++ b/source/mircoders/servlet/ServletModuleUploadedMedia.java @@ -1,42 +1,78 @@ +/* + * Copyright (C) 2001, 2002 The Mir-coders group + * + * This file is part of Mir. + * + * Mir is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Mir is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Mir; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, The Mir-coders gives permission to link + * the code of this program with the com.oreilly.servlet library, any library + * licensed under the Apache Software License, The Sun (tm) Java Advanced + * Imaging library (JAI), The Sun JIMI library (or with modified versions of + * the above that use the same license as the above), and distribute linked + * combinations including the two. You must obey the GNU General Public + * License in all respects for all of the code used other than the above + * mentioned libraries. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If you do + * not wish to do so, delete this exception statement from your version. + */ + package mircoders.servlet; -import freemarker.template.SimpleHash; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.util.Map; + +import javax.servlet.ServletContext; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import mir.config.MirPropertiesConfiguration; +import mir.config.MirPropertiesConfiguration.PropertiesConfigExc; import mir.entity.Entity; import mir.entity.EntityList; +import mir.log.LoggerWrapper; import mir.media.MediaHelper; import mir.media.MirMedia; -import mir.media.MirMediaException; -import mir.media.MirMediaUserException; -import mir.misc.MirConfig; -import mir.misc.MpRequest; -import mir.misc.StringUtil; +import mir.misc.FileHandler; +import mir.misc.FileHandlerException; +import mir.misc.FileHandlerUserException; import mir.misc.WebdbMultipartRequest; -import mir.module.ModuleException; import mir.servlet.ServletModule; -import mir.servlet.ServletModuleException; -import mir.servlet.ServletModuleUserException; -import mir.storage.Database; -import mir.storage.StorageObjectException; +import mir.servlet.ServletModuleExc; +import mir.servlet.ServletModuleFailure; +import mir.servlet.ServletModuleUserExc; +import mir.storage.StorageObjectFailure; +import mircoders.entity.EntityContent; +import mircoders.entity.EntityUploadedMedia; import mircoders.entity.EntityUsers; -import mircoders.storage.DatabaseMediaType; +import mircoders.media.MediaRequest; +import mircoders.storage.DatabaseContent; import mircoders.storage.DatabaseMediafolder; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.ServletContext; - -import java.io.IOException; -import java.net.URLEncoder; -import java.util.GregorianCalendar; -import java.util.HashMap; +import freemarker.template.SimpleHash; +import freemarker.template.SimpleList; /* * ServletModuleBilder - * liefert HTML fuer Bilder * - * - * @author RK + * @version $Id: ServletModuleUploadedMedia.java,v 1.20 2003/03/08 17:18:19 idfx Exp $ + * @author RK, the mir-coders group */ public abstract class ServletModuleUploadedMedia @@ -48,210 +84,99 @@ public abstract class ServletModuleUploadedMedia return null; } + public ServletModuleUploadedMedia() { + super(); + logger = new LoggerWrapper("ServletModule.UploadedMedia"); + } + public void insert(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException, ServletModuleUserException { + throws ServletModuleExc, ServletModuleUserExc { try { - WebdbMultipartRequest mp = new WebdbMultipartRequest(req); - HashMap parameters = mp.getParameters(); EntityUsers user = _getUser(req); - String mediaId = null; - MpRequest mpReq = (MpRequest) mp.requestList.get(0); - String mediaTypeId; //= null; - MirMedia mediaHandler; - Database mediaStorage; - - // get the content-type from what the client browser - // sends us. (the "Oreilly method") - String contentType = mpReq.getContentType(); - String fileName = mpReq.getFilename(); - theLog.printInfo("CONTENT-TYPE FROM BROWSER: " + contentType); - - // if the client browser sent us unknown (text/plain is default) - // or if we got application/octet-stream, it's possible that - // the browser is in error, better check against the file extension - if (contentType.equals("text/plain") || - contentType.equals("application/octet-stream")) { - /** - * Fallback to finding the mime-type through the standard ServletApi - * ServletContext getMimeType() method. - * - * This is a way to get the content-type via the .extension, - * we could maybe use a magic method as an additional method of - * figuring out the content-type, by looking at the header (first - * few bytes) of the file. (like the file(1) command). We could - * also call the "file" command through Runtime. This is an - * option that I almost prefer as it is already implemented and - * exists with an up-to-date map on most modern Unix like systems. - * I haven't found a really nice implementation of the magic method - * in pure java yet. - * - * The first method we try thought is the "Oreilly method". It - * relies on the content-type that the client browser sends and - * that sometimes is application-octet stream with - * broken/mis-configured browsers. - * - * The map file we use for the extensions is the standard web-app - * deployment descriptor file (web.xml). See Mir's web.xml or see - * your Servlet containers (most likely Tomcat) documentation. - * So if you support a new media type you have to make sure that - * it is in this file -mh - */ - ServletContext ctx = - (ServletContext)MirConfig.getPropAsObject("ServletContext"); - contentType = ctx.getMimeType(fileName); - if (contentType == null) - contentType = "text/plain"; // rfc1867 says this is the default - } - theLog.printInfo("CONTENT TYPE IS: " + contentType); + MediaRequest mediaReq = new MediaRequest(user.getId(), false); + WebdbMultipartRequest mp = new WebdbMultipartRequest(req, (FileHandler)mediaReq); + EntityList mediaList = mediaReq.getEntityList(); + String articleid = (String) mp.getParameters().get("articleid"); - if (contentType.equals("text/plain") || - contentType.equals("application/octet-stream")) { - _throwBadContentType(fileName, contentType); - } + if (articleid!=null) { + EntityContent entContent = (EntityContent) DatabaseContent.getInstance().selectById(articleid); - parameters.put("date", StringUtil.date2webdbDate(new GregorianCalendar())); - parameters.put("to_publisher", user.getId()); + mediaList.rewind(); - //the where clause to find the media_type entry from the content-type. - //we use the media type entry to lookup the media Handler/Storage classes - // @todo this should probably be moved to DatabaseMediaType or - // somewhere else appropriate -mh - String[] contentTypeSplit = StringUtil.split(contentType, "/"); - String wc = " mime_type LIKE '" + contentTypeSplit[0] + "%'"; - DatabaseMediaType mediaTypeStor = DatabaseMediaType.getInstance(); - EntityList mediaTypesList = mediaTypeStor.selectByWhereClause(wc); - - // if we didn't find an entry matching the - // content-type in the table. - if (mediaTypesList.size() == 0) { - _throwBadContentType(fileName, contentType); - } - Entity mediaType = null; - Entity mediaType2 = null; - - // find out if we an exact content-type match if so take it. - // otherwise try to match majortype/* - // @todo this should probably be moved to DatabaseMediaType -mh - for(int j=0;j Integer.parseInt(maxMedia)) { + numOfMedia = maxMedia; + } + + int mediaNum = Integer.parseInt(numOfMedia); + SimpleList mediaFields = new SimpleList(); + for(int i =0; i