参考网上设置和dwr3的例子,做一个文件上传的小东西,但是发现有问题
dwr.xml 和web.xml的配置不再多说。
js:
html:
java:
如果上传页面是html则上传没问题,即不使用struts2的过滤器,不经过struts2的拦截器,如果上传页面改为jsp,即在struts2的框架内,则提示错误"Failed to find parameter: scriptSessionId"。
问题已解决:需注意的地方是java方法中的参数必须是BufferedImage,InputStream,FileTransfer三种中其中一个,一般推荐使用FileTransfer,可以获取文件名、文件类型、和内置的inputStream。
再有web.xml配置的struts2 filter-mapping不能为/*
可以设置成:
dwr.xml 和web.xml的配置不再多说。
js:
<head>
<script type='text/javascript' src='/sxnicoa/dwr/engine.js'> </script>
<script type='text/javascript' src='/sxnicoa/dwr/util.js'> </script>
<script type='text/javascript' src='/sxnicoa/dwr/interface/DwrUpload.js'></script>
<script type="text/javascript">
function uploadFiles() {
var file = dwr.util.getValue('uploadImage');
DwrUpload.uploadImage(file,function(data) {
dwr.util.setValue('image', data);
});
}
</script>
html:
<table class="plain grey form">
<tr>
<th>Image:</th>
<td><input type="file" id="uploadImage" size="30"/></td>
</tr>
<tr>
<th>File:</th>
<td><input type="file" id="uploadFile" size="30"/></td>
</tr>
<tr>
<th>Color:</th>
<td>#<input type="text" id="color" value="FFFFFF" size="7"/></td>
</tr>
<tr>
<th></th>
<td>
<button onclick="uploadFiles()">Upload</button>
</td>
</tr>
</table>
<img id="image" src="javascript:void(0);"/>
java:
public class DwrUpload {
private static Logger logger = LoggerFactory.getLogger(DwrUpload.class);
public void uploadFile(String uploadFile) {
logger.debug("uploadFile==="+uploadFile);
}
public BufferedImage uploadImage(BufferedImage uploadImage)
{
logger.debug("uploadImage==="+uploadImage);
AffineTransform atx = new AffineTransform();
atx.scale(200d / uploadImage.getWidth(), 200d / uploadImage.getHeight());
// AffineTransformOp.TYPE_BILINEAR is very slow
AffineTransformOp afop = new AffineTransformOp(atx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
uploadImage = afop.filter(uploadImage, null);
return uploadImage;
}
}
如果上传页面是html则上传没问题,即不使用struts2的过滤器,不经过struts2的拦截器,如果上传页面改为jsp,即在struts2的框架内,则提示错误"Failed to find parameter: scriptSessionId"。
问题已解决:需注意的地方是java方法中的参数必须是BufferedImage,InputStream,FileTransfer三种中其中一个,一般推荐使用FileTransfer,可以获取文件名、文件类型、和内置的inputStream。
再有web.xml配置的struts2 filter-mapping不能为/*
可以设置成:
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>*.jspa</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>