作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用以下代码将图像上传到数据库,
MyJsp.jsp
<form action="ImageUploadToDB" method="post" enctype="multipart/form-data">
<div>
<img alt="Image1" id="Image11" src="" width="130px" height="90px" class="imgtotxt"><br><br>
<input type="file" id="files11" class="fileUploadimgtotxt" name="files3[]" style="" value="Select Image">
<img alt="Image2" id="Image12" src="" width="130px" height="90px" class="imgtotxt"><br><br>
<input type="file" id="files12" class="fileUploadimgtotxt" name="files3[]" style="" value="Select Image">
<img alt="Image3" id="Image13" src="" width="130px" height="90px" class="imgtotxt"><br><br>
<input type="file" id="files13" class="fileUploadimgtotxt" name="files3[]" style="" value="Select Image">
<img alt="Image4" id="Image14" src="" width="130px" height="90px" class="imgtotxt"><br><br>
<input type="file" id="files14" class="fileUploadimgtotxt" name="files3[]" style="" value="Select Image">
<img alt="Image5" id="Image15" src="" width="130px" height="90px" class="imgtotxt"><br><br>
<input type="file" id="files15" class="fileUploadimgtotxt" name="files3[]" style="" value="Select Image">
</div>
</form>
我使用如下所示的 servlet 插入从上面表单上传的所有图像,
final FileItemFactory factory = new DiskFileItemFactory();
final ServletFileUpload fileUpload = new ServletFileUpload(factory);
List items = null;
LinkedHashMap<String, InputStream> fileMap = new LinkedHashMap<String, InputStream>();
if (ServletFileUpload.isMultipartContent(request)) {
try {
items = fileUpload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
System.out.println("selected images :"+items);
if (items != null) {
final Iterator iter = items.iterator();
while (iter.hasNext()) {
final FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
} else {
fileMap.put(item.getName(), item.getInputStream());
//System.out.println("uploaded images here:"+item.getName());
}
}
}
}
try {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/raptor1_5","root","");
Set<String> keySet = fileMap.keySet();
for (String fileName : keySet) {
String sql ="INSERT INTO contacts2 (images) values (?)" ;
PreparedStatement statement;
statement = con.prepareStatement(sql);
statement.setBlob(1, fileMap.get(fileName));
int row = statement.executeUpdate();
System.out.println("inserted successfully:");
}
}
catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("errror is:"+e);
}
finally{
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
如果我上传 images1.jpg、image2.jpg、image3.jpg、image4.jpg、image5.jpg 那么我的输出是:
inserted successfully:
inserted successfully:
inserted successfully:
inserted successfully:
inserted successfully:
但是如果我上传诸如 images1.jpg、images2.jpg、images1.jpg、images4.jpg、images2.jpg 那么我的输出是:
inserted successfully:
inserted successfully:
inserted successfully:
当我检查我的数据库时,只有 image1.jpg、image2.jpg、image4.jpg。我不知道为什么相同名称的图像没有插入到数据库中。
有人告诉我我错在哪里吗?
更新:这是Keval先生的回答
fileMap.put((item.getName() + "" + new Date().getTime()), item.getInputStream());
int count2 =5;
for (int
k=0;k<5;k++) {
System.out.println("for successfully:");
String sql ="INSERT INTO tbl_MatchImgToImg (Class, Subject, CreatedBy, QimgName, Qimg, AimgName, Aimg) values (?, ?, ?, ?, ?, ?, ?)" ;
PreparedStatement statement;
statement = con.prepareStatement(sql);
statement.setString(1, clas);
statement.setString(2, subject);
statement.setString(3, uid);
System.out.println("Qimg name is:"+listGet.get(k));
statement.setString(4, listGet.get(k));
System.out.println("Qimg is:"+fileMap.values().toArray()[k]);
Object bb = fileMap.values().toArray()[k];
// System.out.println("Qimg is:"+listGet2.get(listgetcount));
// System.out.println("finallyyyy:"+fileMap.get("files1"));
statement.setBinaryStream(5, (InputStream) bb);
// System.out.println("Aimg name is:"+listGet.get(count2));
statement.setString(6, listGet.get(count2));
//System.out.println("Aimg is:"+fileMap.values().toArray()[count2]);
Object bb2 = fileMap.values().toArray()[count2];
//System.out.println("Qimg is:"+fileMap.get("files2"));
//String getval2 = listGet2.get(count2);
statement.setBinaryStream(7, (InputStream) bb2);
int row = statement.executeUpdate();
System.out.println("inserted successfully:");
count2=count2+1;
}
如果我上传相同的图像,则显示如下
for successfully:
Qimg name is:image1.jpg
Qimg is:java.io.FileInputStream@f747c0
inserted successfully:
for successfully:
Qimg name is:image4.jpg
Qimg is:java.io.FileInputStream@fd4f30
inserted successfully:
for successfully:
Qimg name is:image5.jpg
Qimg is:java.io.FileInputStream@1b654b9
inserted successfully:
for successfully:
Qimg name is:image7.jpg
Qimg is:java.io.FileInputStream@1303c07
inserted successfully:
for successfully:
Qimg name is:image9.jpg
Qimg is:java.io.FileInputStream@110b3f6
java.lang.ArrayIndexOutOfBoundsException: 9
最佳答案
将值放入 map 时
...
fileMap.put(item.getName(), item.getInputStream());
....
您已将“文件名”保留为键,并且 map 仅保留最后添加的值,以防出现重复键。
因此,我建议您用唯一的 key 替换您的文件名。
关于java - 上传图像的相同图像名称未插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28470591/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!