使用Spring上传多个文件到数据库
Upload Multiple Files into Database using Spring
我一直在做一个Spring应用程序,我在上传文件部分遇到了一些问题。在第一种情况下,我只有一个文件输入类型,它工作得很好,但我知道我已经放了一个javascript,增加了更多的输入,我真的不知道如何在控制器中处理。
我的JSP看起来像:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page session="false" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="<c:url value="/resources/css/form-upload.css" />" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="description" content="">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="http://blueimp.github.com/cdn/css/bootstrap.min.css" />
<script type="text/javascript" src="<c:url value="/resources/js/css_browser_selector.js"/>"></script>
<script type="text/javascript">
/**
A lot of code that make the "magic" of adding one field
*/
</script>
</head>
<body style="background: white;">
<c:url var="subeUrl" value="/process/doUpload" />
<form name="file1" method="POST" action="${subeUrl}" enctype="multipart/form-data" class="formulario">
<div id="titulo"><p>Adjuntar archivos</p></div></br>
<fieldset id="upload-message">
<table>
<tbody id="color_contacts">
<tr valign="top">
<td colspan="5" id="ancho">
<div class="file-wrapper">
<input type="file" name="filename[0]" id="filename[0]" size="9" value="" />
<input name="id_solicitud" type="hidden" value="${id}" />
<div id="hideSpan"><span class="buttones">Choose a file</span></div>
</div>
<div class="for-same">
<div class="explorer">
<button onclick="javascript:addColorControl();return false;" class="btn btn-success fileinput-button">
<i class="icon-plus icon-white"></i>
</button>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</br>
<div class="post-form"><input type="submit" value="Subir" name="submit" class="post-form" /></div>
</fieldset>
</form>
</body>
</html>
你可以看到表单中的文件名是"filename[index]"
在我的控制器中我尝试了这个,但是你可以想象,它不起作用:
@RequestMapping(value="/doUpload", method=RequestMethod.POST)
public String doUpload(HttpServletRequest req, HttpSession session, @RequestParam("filename[]") CommonsMultipartFile[] filename, Map<String, Object> map) throws Exception{
String cod = (String) session.getAttribute("user");
File folder = new File("C:/wamp/www/Uploads/"+ cod + "/");
folder.mkdirs();
Archivo arc = new Archivo();
int a = 0;
if (filename[a] != null && filename[a].getSize() > 0 && a < 4) {
for (CommonsMultipartFile aFile : filename){
arc.setId_archivo("0");
arc.setId_solicitud(req.getParameter("id_solicitud"));
System.out.println("Saving file: " + saveDirectory + cod + "/" + aFile.getOriginalFilename());
if (!aFile.getOriginalFilename().equals("")) {
aFile.transferTo(new File(saveDirectory + cod + "/" + aFile.getOriginalFilename()));
}
if (aFile.getOriginalFilename() != ""){
String nombreArch = "http://localhost/Uploads/direct_download.php?file=" +cod + "/" + aFile.getOriginalFilename();
System.out.println(nombreArch);
arc.setArchivo(nombreArch);
}
else {
arc.setArchivo(null);
}
a ++;
}
service.agregaFile(arc);
}
return "cliente/successUp";
}
我希望有人能帮助我,我是新来的春天。提前感谢。:) 我不确定是否可以在处理程序方法参数上注入commonsmmultipartfile,尝试使用org.springframework.web.multipart.MultipartFile。
也要确保你有一个commonsmmultipartresolver定义在你的spring容器上,像这样:
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
和common_fileupload jar包含在你的类路径(即:作为maven依赖)
我在回答我自己的问题,最后真的很简单。我只是将输入的名称改为filename
所以所有的输入都有相同的名称在我的控制器中,我更改了这个:
@RequestMapping(value="/doUpload", method=RequestMethod.POST)
public String doUpload(HttpServletRequest req, HttpSession session, @RequestParam CommonsMultipartFile[] filename, Map<String, Object> map) throws Exception{
String cod = (String) session.getAttribute("user");
File folder = new File("C:/wamp/www/Uploads/"+ cod + "/");
folder.mkdirs();
Archivo arc = new Archivo();
if (filename != null && filename.getSize() > 0 ) {
for (CommonsMultipartFile aFile : filename){
arc.setId_archivo("0");
arc.setId_solicitud(req.getParameter("id_solicitud"));
System.out.println("Saving file: " + saveDirectory + cod + "/" + aFile.getOriginalFilename());
if (!aFile.getOriginalFilename().equals("")) {
aFile.transferTo(new File(saveDirectory + cod + "/" + aFile.getOriginalFilename()));
}
if (aFile.getOriginalFilename() != ""){
String nombreArch = "http://localhost/Uploads/direct_download.php?file=" +cod + "/" + aFile.getOriginalFilename();
System.out.println(nombreArch);
arc.setArchivo(nombreArch);
}
else {
arc.setArchivo(null);
}
service.agregaFile(arc);
}
}
只是删除了CommonsMultiPartFile @RequestParam中的filename[]
部分,并将service.agregaFile(arc)
放入for
中。现在一切正常!谢谢。
相关文章:
- 通过CSV文件上载更新数据库表
- 使用node-js上传文件,并将表单信息存储在数据库(mysql)中
- 使用对数据库的写入权限保护文件
- 使用 pur Html 和 Javascript 将文件插入数据库
- 使用ajax将图像上传到文件数据库有疑问
- 我无法以某种方式在数据库中POST文件
- 将数据库中的数据转换为可下载的PDF文件
- Html5存储本地存储数据库文件
- 如何将图像文件以及JavaScript变量的值上传到服务器和数据库
- 使用node.js将非常大的json文件索引/摄取到数据库中
- 有没有一种简单的方法可以通过javascript将MySQL文件导入SQLite数据库
- 最佳实现:将图像文件上传到数据库,并从数据库中读取图像
- Javascript/PHP,使用文本文件作为数据库,并将内容组织到阵列表中
- 如何在Web SQL数据库中逐行插入文本文件
- 当使用AJAX获取PHP文件以从MySQL数据库中检索数据时,会出现下拉表单disapering
- 将数据库存储/备份到一个文件中,IndexeDB、WebSQL和SQLlite的区别
- 使用Javascript调用从MySQL数据库读取网站内容的PHP文件
- 如何使用 typicode/lowdb 文件数据库更新项目数组
- Nodejs -多文件或单文件数据库
- 如何正确保护表单平面文件数据库