<input type="file" id="upload" name="upload"/> 这个name就是与Action的属性对应
private File upload; private String uploadFileName; private String uploadContentType; public void setUpload(File upload) { this.upload = upload; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; }
特 别注意:,<s:file/>标志不单单是绑定到upload,还有uploadContentType(上传文件的MIME类型)和 uploadFileName(上传文件的文件名,该文件名不包括文件的路径)。所以,<s:file name="xxx" />对应Action类里面的xxx、xxxContentType和xxxFileName三个属性。 java
<s:file name="upload" label="上传的文件" />
action中,声明代码: app
private File upload; private String uploadContentType; // 文件的内容类型 private String uploadFileName; // 上传文件名
这里有个疑问, 文件名和文件类型是如何获取的? jsp
约定,在struts2内部的的FileUploadInterceptor完成的 String[] fileName = multiWrapper.getFileNames(inputName);//获得请求的全部文件名 if (isNonEmpty(fileName)) { // get a File object for the uploaded File File[] files = multiWrapper.getFiles(inputName); if (files != null && files.length > 0) { List<File> acceptedFiles = new ArrayList<File>(files.length); List<String> acceptedContentTypes = new ArrayList<String>(files.length); List<String> acceptedFileNames = new ArrayList<String>(files.length); String contentTypeName = inputName + "ContentType";//默认就是input名称+ContentType String fileNameName = inputName + "FileName";//默认就是input名称+FileName for (int index = 0; index < files.length; index++) { if (acceptFile(action, files[index], fileName[index], contentType[index], inputName, validation, ac.getLocale())) { acceptedFiles.add(files[index]); acceptedContentTypes.add(contentType[index]); acceptedFileNames.add(fileName[index]); } } if (!acceptedFiles.isEmpty()) { Map<String, Object> params = ac.getParameters();//添加到parameters中 这样就能够经过OGNL注入到action了 params.put(inputName, acceptedFiles.toArray(new File[acceptedFiles.size()])); params.put(contentTypeName, acceptedContentTypes.toArray(new String[acceptedContentTypes.size()])); params.put(fileNameName, acceptedFileNames.toArray(new String[acceptedFileNames.size()])); } }
参考文档: this
http://blog.163.com/linfenliang@126/blog/static/127857195201171205937621/ spa