我有一个jsp
,其中包含此代码段。
<form name="AudioFileConversionForm" enctype="multipart/form-data" method="post" >
Choose File: <input type="file" id="audioFile" name="audioFile"><br>
<input type="submit" value="upload">
</form>
这是spring
中的控制器。
public String convertFile(HttpServletRequest request, HttpSession session) {
String audioFile = request.getParameter("audioFile");
System.out.println(request.getParameter("audioFile"));
System.out.println("Audio File Conversion Successful");
}
我无法检索文件名,显示null
。
我知道我可以使用JQuery或javascript检索名称,但我不想同时使用它们。我想用纯java来做。
有人可以帮帮我吗?
答案 0 :(得分:16)
上传文件时,request
是org.springframework.web.multipart.MultipartHttpServletRequest
的实例。因此,您可以在方法convertFile()
中强制转换它。见下文:
public String convertFile(HttpServletRequest request, HttpSession session) {
// cast request
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// You can get your file from request
CommonsMultipartFile multipartFile = null; // multipart file class depends on which class you use assuming you are using org.springframework.web.multipart.commons.CommonsMultipartFile
Iterator<String> iterator = multipartRequest.getFileNames();
while (iterator.hasNext()) {
String key = (String) iterator.next();
// create multipartFile array if you upload multiple files
multipartFile = (CommonsMultipartFile) multipartRequest.getFile(key);
}
// logic for conversion
}
但是我无法检索(接收空值)我在JSP页面中选择的文件的名称。
---&GT;要获取文件名,您可以将其命名为:
multipartFile.getOriginalFilename(); // get filename on client's machine
multipartFile.getContentType(); // get content type, you can recognize which kind of file is, pdf or image or doc etc
multipartFile.getSize() // get file size in bytes
要使文件上传工作,您需要确保创建多部分解析器bean,如下所示:
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes -->
<property name="maxUploadSize" value="100000"/>
</bean>
答案 1 :(得分:3)
使用MultipartFile实用程序并尝试此
MultipartRequest multipartRequest = (MultipartRequest) request;
Map map = multipartRequest.getFileMap();
MultipartFile mfile = null;
for (Iterator iter = map.values().iterator(); iter.hasNext();) {
mfile = (MultipartFile) iter.next();
String fileName = mfile.getOriginalFilename()
}
或者你可以试试apache commons文件上传。
答案 2 :(得分:2)
无法直接检索文件名。您可以使用Apache Commons Fileupload API -
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
// Process a normal field
String name = item.getFieldName();
String value = item.getString();
} else {
// Process a file upload field
String fileName = item.getName();
// DO further processing
}
}
更多细节 -
http://commons.apache.org/fileupload/using.html
它也可以用Java完成,但显然需要更多的代码。
答案 3 :(得分:1)
但是,首先,您需要 Commons Fileupload API ,这将帮助您使用file.getFieldName()
来显示表单字段名称和{{ 1}}显示文件类型和file.getContentType()
以显示文件名
file.getName()
答案 4 :(得分:0)
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
// Process a normal field
String name = item.getFieldName();
String value = item.getString();
} else {
// Process a file upload field
String fileName = item.getName();
// DO further processing
}
}