gpt4 book ai didi

java - 上传图像的相同图像名称未插入数据库

转载 作者:行者123 更新时间:2023-12-02 04:59:08 25 4
gpt4 key购买 nike

我正在尝试使用以下代码将图像上传到数据库,

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com