jsp文件上传问题 最近由于工作需要 做了一个上传功能 我直接提交到一个jsp 或者 servlet 就没问题但是如果提交到 struts的action 就得不到上传的文件 不知为什么 struts 是 1.2 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不清楚你原来做的上传是怎么做的 会不会是因为struts的过滤器做了些什么呢?你可以把上传改成用struts的FormFile做 上传的jsp页面追加enctype属性<html:form action="path" enctype="multipart/form-data"></html:form>将actionForm中追加private FormFile selectFile;上传的文件的相关信息就可以通过actionForm.getSelectFile()得到 如果是多文件呢,用struts 怎么弄 页面的 form 加这个属性 enctype="application/x-www-form-urlencoded" struts1 好像不支持批量上传吧我也不是很清楚。。 上传的时候你看看能否映射成FormFile[]属性 说不定就可以多个上传 我没实验过LZ的问题貌似我见过谁问过 但是找不到原来的帖了... 我改成FormFile[]试过 ,要出错 也许是我html没写对 不知道怎么写 struts可以上传多个,自己配个 其实最好的实现是使用Flex+java,可以在线预览: FLEX代码如下: <?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="505" height="346" minWidth="955" minHeight="600" backgroundColor="#BCD2EF" creationComplete="init()"> <fx:Script> <![CDATA[ import mx.controls.Alert; private var file_upload_personal:FileReference=new FileReference(); private var file_upload_company:FileReference=new FileReference(); private function init():void { file_upload_personal.addEventListener(Event.SELECT,personalselect); file_upload_personal.addEventListener(Event.COMPLETE,personalcomplete); file_upload_personal.addEventListener(ProgressEvent.PROGRESS,personalprogress); file_upload_company.addEventListener(Event.SELECT,companyselect); file_upload_company.addEventListener(Event.COMPLETE,companycomplete); file_upload_company.addEventListener(ProgressEvent.PROGRESS,companyprogress); } private function personalselect(event:Event):void { if(file_upload_personal.name.lastIndexOf(".jpg")==-1&&file_upload_personal.name.lastIndexOf(".jpeg")==-1&&file_upload_personal.name.lastIndexOf(".png")==-1 &&file_upload_personal.name.lastIndexOf(".gif")==-1&& file_upload_personal.name.lastIndexOf(".JPG")==-1&&file_upload_personal.name.lastIndexOf(".JPEG")==-1&&file_upload_personal.name.lastIndexOf(".PNG")==-1 &&file_upload_personal.name.lastIndexOf(".GIF")==-1 ) { Alert.show("图片文件不合格!","提示"); return; } f_text_personal.text=file_upload_personal.name; } private function personalcomplete(event:Event):void { state_personal.text="个人形象照上传完成!"; image_personal.source="../adminphoto/"+file_upload_personal.name; personal_bt.enabled=false; } private function personalprogress(event:ProgressEvent):void { state_personal.text="已上传"+event.bytesLoaded+"字节,共"+event.bytesTotal+"字节"; var proc:uint=event.bytesLoaded/event.bytesTotal*100; bar_personal.setProgress(proc,100); bar_personal.label="当前进度:"+"" +proc+"%"; } private function personalupload():void { var request:URLRequest=new URLRequest("../UploadPhoto"); try { file_upload_personal.upload(request); }catch(error:Error) { Alert.show(error.message,"错误信息"); } } //company private function companyselect(event:Event):void { if(file_upload_company.name.lastIndexOf(".jpg")==-1&&file_upload_company.name.lastIndexOf(".jpeg")==-1&&file_upload_company.name.lastIndexOf(".png")==-1 &&file_upload_company.name.lastIndexOf(".gif")==-1&& file_upload_company.name.lastIndexOf(".JPG")==-1&&file_upload_company.name.lastIndexOf(".JPEG")==-1&&file_upload_company.name.lastIndexOf(".PNG")==-1 &&file_upload_company.name.lastIndexOf(".GIF")==-1 ) { Alert.show("图片文件不合格!","提示"); return; } f_text_company.text=file_upload_company.name; } private function companycomplete(event:Event):void { state_company.text="店铺形象照片上传完成!"; image_company.source="../adminphoto/"+file_upload_company.name; company_bt.enabled=false; } private function companyprogress(event:ProgressEvent):void { state_company.text="已上传"+event.bytesLoaded+"字节,共"+event.bytesTotal+"字节"; var proc:uint=event.bytesLoaded/event.bytesTotal*100; bar_company.setProgress(proc,100); bar_company.label="当前进度:"+"" +proc+"%"; } private function companyupload():void { var request:URLRequest=new URLRequest("../UploadShopPhoto"); try { file_upload_company.upload(request); }catch(error:Error) { Alert.show(error.message,"错误信息"); } } ]]> </fx:Script> <s:Button label="上传个人靓照" x="267" y="201" click="file_upload_personal.browse()"/> <s:TextInput id="f_text_personal" x="46" y="199" width="196"/> <s:TextInput id="f_text_company" x="42" y="273" width="183"/> <s:Button x="263" y="274" width="104" label="上传店铺形象照" click="file_upload_company.browse()"/> <s:Image id="image_personal" x="46" y="5" width="196" height="150"/> <s:Image id="image_company" x="269" y="6" width="199" height="149"/> <mx:ProgressBar id="bar_personal" x="59" y="229" width="251" height="37"/> <mx:ProgressBar id="bar_company" x="59" y="302" width="251"/> <s:Label id="state_personal" x="46" y="163" width="196" height="19" color="#E60E0E" fontSize="14"/> <s:Label id="state_company" x="269" y="163" width="199" height="19" color="#E10B0B" fontSize="14"/> <s:Button id="personal_bt" x="374" y="201" label="上传" click="personalupload()"/> <s:Button id="company_bt" x="380" y="274" label="上传" click="companyupload()"/></s:Application>java服务器端:package com.eShop.servlet;import java.io.File;import java.io.IOException;import java.util.Date;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import com.eShop.util.Constants;import com.eShop.util.Tools;/** * Servlet implementation class for Servlet: UploadPhoto *姜鹏,2011-9-8,用于处理管理员形象照片和店铺照片的类。 */ public class UploadPhoto extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { static final long serialVersionUID = 1L; public UploadPhoto() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { request.setCharacterEncoding("UTF-8"); String uploadPath=request.getRealPath("/adminphoto"); HttpSession session=request.getSession(); System.out.println("uploadPath:"+uploadPath); int maxPostSize=1000*1024*1024; File file_dir=new File(uploadPath); if(!file_dir.exists()) { file_dir.mkdirs(); } DiskFileItemFactory factory=new DiskFileItemFactory(); factory.setSizeThreshold(4096); ServletFileUpload upload=new ServletFileUpload(factory); upload.setSizeMax(maxPostSize); List fileItems=upload.parseRequest(request); Iterator iterator=fileItems.iterator(); while(iterator.hasNext()) { FileItem item=(FileItem)iterator.next(); if(!item.isFormField()) { String name=item.getName(); item.write(new File(uploadPath+"//"+name)); if(session.getAttribute(Constants.ADMIN_PHOTO)!=null) { session.removeAttribute(Constants.ADMIN_PHOTO); } session.setAttribute(Constants.ADMIN_PHOTO, name); break;//只上传一个文件,故退出。 } } } catch(Exception e) { e.printStackTrace(); } } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }上传时将上传后的文件放在一个session中,再在JSP页面得到这个图片名称,保存在数据库中。 急!!在线等,hibernate运行问题,初学,求帮忙 递归 该怎么用?? 奇怪的lazy struts 配置路径问题{入门阶段} hibernate 或者jpa中 mysql 统计问问题!!!! struts 1.2中tiles-def.xml中的目录小问题 struts中 jsp页面编译时,以什么方式编码? 如何使用ant 从cvs上 checkout资料 cmp部署时出现问题 JUEL怎么用起来? 在项目的xml中里面有这么一段代码 菜鸟之CVS版本控制器问题
你可以把上传改成用struts的FormFile做
</html:form>
将actionForm中追加private FormFile selectFile;
上传的文件的相关信息就可以通过actionForm.getSelectFile()得到
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="505" height="346" minWidth="955" minHeight="600" backgroundColor="#BCD2EF"
creationComplete="init()">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
private var file_upload_personal:FileReference=new FileReference();
private var file_upload_company:FileReference=new FileReference();
private function init():void
{
file_upload_personal.addEventListener(Event.SELECT,personalselect);
file_upload_personal.addEventListener(Event.COMPLETE,personalcomplete);
file_upload_personal.addEventListener(ProgressEvent.PROGRESS,personalprogress);
file_upload_company.addEventListener(Event.SELECT,companyselect);
file_upload_company.addEventListener(Event.COMPLETE,companycomplete);
file_upload_company.addEventListener(ProgressEvent.PROGRESS,companyprogress);
}
private function personalselect(event:Event):void
{
if(file_upload_personal.name.lastIndexOf(".jpg")==-1&&file_upload_personal.name.lastIndexOf(".jpeg")==-1&&file_upload_personal.name.lastIndexOf(".png")==-1
&&file_upload_personal.name.lastIndexOf(".gif")==-1&&
file_upload_personal.name.lastIndexOf(".JPG")==-1&&file_upload_personal.name.lastIndexOf(".JPEG")==-1&&file_upload_personal.name.lastIndexOf(".PNG")==-1
&&file_upload_personal.name.lastIndexOf(".GIF")==-1
)
{
Alert.show("图片文件不合格!","提示");
return;
}
f_text_personal.text=file_upload_personal.name;
}
private function personalcomplete(event:Event):void
{
state_personal.text="个人形象照上传完成!";
image_personal.source="../adminphoto/"+file_upload_personal.name;
personal_bt.enabled=false;
}
private function personalprogress(event:ProgressEvent):void
{
state_personal.text="已上传"+event.bytesLoaded+"字节,共"+event.bytesTotal+"字节";
var proc:uint=event.bytesLoaded/event.bytesTotal*100;
bar_personal.setProgress(proc,100);
bar_personal.label="当前进度:"+"" +proc+"%";
}
private function personalupload():void
{
var request:URLRequest=new URLRequest("../UploadPhoto");
try
{
file_upload_personal.upload(request);
}catch(error:Error)
{
Alert.show(error.message,"错误信息");
}
}
//company
private function companyselect(event:Event):void
{
if(file_upload_company.name.lastIndexOf(".jpg")==-1&&file_upload_company.name.lastIndexOf(".jpeg")==-1&&file_upload_company.name.lastIndexOf(".png")==-1
&&file_upload_company.name.lastIndexOf(".gif")==-1&&
file_upload_company.name.lastIndexOf(".JPG")==-1&&file_upload_company.name.lastIndexOf(".JPEG")==-1&&file_upload_company.name.lastIndexOf(".PNG")==-1
&&file_upload_company.name.lastIndexOf(".GIF")==-1
)
{
Alert.show("图片文件不合格!","提示");
return;
}
f_text_company.text=file_upload_company.name;
}
private function companycomplete(event:Event):void
{
state_company.text="店铺形象照片上传完成!";
image_company.source="../adminphoto/"+file_upload_company.name;
company_bt.enabled=false;
}
private function companyprogress(event:ProgressEvent):void
{
state_company.text="已上传"+event.bytesLoaded+"字节,共"+event.bytesTotal+"字节";
var proc:uint=event.bytesLoaded/event.bytesTotal*100;
bar_company.setProgress(proc,100);
bar_company.label="当前进度:"+"" +proc+"%";
}
private function companyupload():void
{
var request:URLRequest=new URLRequest("../UploadShopPhoto");
try
{
file_upload_company.upload(request);
}catch(error:Error)
{
Alert.show(error.message,"错误信息");
}
}
]]>
</fx:Script>
<s:Button label="上传个人靓照" x="267" y="201" click="file_upload_personal.browse()"/>
<s:TextInput id="f_text_personal" x="46" y="199" width="196"/>
<s:TextInput id="f_text_company" x="42" y="273" width="183"/>
<s:Button x="263" y="274" width="104" label="上传店铺形象照" click="file_upload_company.browse()"/>
<s:Image id="image_personal" x="46" y="5" width="196" height="150"/>
<s:Image id="image_company" x="269" y="6" width="199" height="149"/>
<mx:ProgressBar id="bar_personal" x="59" y="229" width="251" height="37"/>
<mx:ProgressBar id="bar_company" x="59" y="302" width="251"/>
<s:Label id="state_personal" x="46" y="163" width="196" height="19" color="#E60E0E" fontSize="14"/>
<s:Label id="state_company" x="269" y="163" width="199" height="19" color="#E10B0B" fontSize="14"/>
<s:Button id="personal_bt" x="374" y="201" label="上传" click="personalupload()"/>
<s:Button id="company_bt" x="380" y="274" label="上传" click="companyupload()"/>
</s:Application>
java服务器端:
package com.eShop.servlet;import java.io.File;import java.io.IOException;
import java.util.Date;
import java.util.Iterator;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;import com.eShop.util.Constants;
import com.eShop.util.Tools;/**
* Servlet implementation class for Servlet: UploadPhoto
*姜鹏,2011-9-8,用于处理管理员形象照片和店铺照片的类。
*/
public class UploadPhoto extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet
{
static final long serialVersionUID = 1L;
public UploadPhoto()
{
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
try
{
request.setCharacterEncoding("UTF-8");
String uploadPath=request.getRealPath("/adminphoto");
HttpSession session=request.getSession();
System.out.println("uploadPath:"+uploadPath);
int maxPostSize=1000*1024*1024;
File file_dir=new File(uploadPath);
if(!file_dir.exists())
{
file_dir.mkdirs();
}
DiskFileItemFactory factory=new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload=new ServletFileUpload(factory);
upload.setSizeMax(maxPostSize);
List fileItems=upload.parseRequest(request);
Iterator iterator=fileItems.iterator();
while(iterator.hasNext())
{
FileItem item=(FileItem)iterator.next();
if(!item.isFormField())
{
String name=item.getName();
item.write(new File(uploadPath+"//"+name));
if(session.getAttribute(Constants.ADMIN_PHOTO)!=null)
{
session.removeAttribute(Constants.ADMIN_PHOTO);
}
session.setAttribute(Constants.ADMIN_PHOTO, name);
break;//只上传一个文件,故退出。
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
this.doGet(request, response);
}
}上传时将上传后的文件放在一个session中,再在JSP页面得到这个图片名称,保存在数据库中。