圖片上傳處理架構

banq發表於2002-08-15
圖片上傳因為Form表頭是
<form name="form1" action="../multipartformtransfer.jsp" method="post" enctype="multipart/form-data">

這樣就不能用Jsp的通用request.getParameter()來獲得引數,但是我們可以做一個類似這樣的介面,比如叫Mrequest.getParameter();

最重要的是,我們還要對上傳圖片進行處理,圖片檔名改名;轉移到指定目錄;圖片如果超過特定長寬可以自動壓縮,這些功能處理完成後,再將其他非file欄位原封不動的傳出。

我使用兩個類 一個jsp來完成這些工作:
public abstract class MultipartFormHandle{
這是完成上述圖片各種處理功能。
public class Multipartformtransfer extends MultipartFormHandle{
這是結合特定應用的一些處理,比如移動檔案等。
還有一個Multipartformtransfer.jsp

<%@ page import="mysite.utils.*" %>
<jsp:useBean id="myEnv" scope="session" class="mysite.web.UserEnvFront"/>
<jsp:useBean id="Multipartformtransfer" scope="application" class="mysite.web.Multipartformtransfer"/>


<%
//Remember transfer uploaded logo picture from homedir to userdir !!!!!
Multipartformtransfer.init(Multipartformtransfer.getTMPUploaddir(),request);

String forward=Multipartformtransfer.getForwardProgram();
if (forward.equals(""))
{
out.println("no forward program");
return;
}
String param=Multipartformtransfer.getForwardProgramParam();
Multipartformtransfer.clear();

response.sendRedirect(forward+"?"+param);

%>

這個Jsp的scope是appliction,適合集中處理系統中所有有關圖片上傳功能,可適合多批圖片同時上傳。相當於servlet.

看看一個client Jsp程式如何呼叫:
<FORM METHOD="POST" ACTION="multipartformtransfer.jsp" ENCTYPE="multipart/form-data" name="frmSelection" onSubmit="return validate()">
<input type="hidden" name="<%=Multipartformtransfer.FORWARDNAME%>" value="<%=request.getRequestURI()%>">
<input type="file" name="logo" size="20" style="font-family:verdana; font-size:11px">
<input type="hidden" name="<%=Multipartformtransfer.MAXWIDTHPARAMNAME%>" value="120" >
<input type="hidden" name="<%=Multipartformtransfer.MAXHEIGHTPARAMNAME%>" value="120" ><br>
<input type="Image" src="images/buildsite_button_next.gif" onMouseOver="this.style.cursor='hand'">
</form>

這個form的action是Multipartformtransfer.jsp,引數forward也是自己,意思是讓Multipartformtransfer.jsp處理好圖片後,再原封不動的轉發回來。這是我們就可以和正常方式一樣使用request.getParameter()來處理form中的引數了。

相關文章