J'utilise des servlets dans lesquels le servlet télécharge plusieurs fichiers dans un dossier à la fois mais il n'a pas obtenu tous les noms de fichiers dans les colonnes de la base de données pourrait-on m'aider dans le code comment obtenir tous les noms de fichiers dans des colonnes à la fois téléchargé par servlet
Il n'y a qu'un seul nom de fichier que j'obtiens dans la colonne de base de données comme 20190416070203.192dellxps15.jpg mais je veux plusieurs noms de fichiers dans les colonnes qui sont les utilisateurs téléchargés comme 20190416070203.192dellxps15.jpg 20190416070203.199HuaweiMAtebookXpro.jpg 20190416070203.207s10plus.jpg
<div class="signup-header"> <h2>Add Product</h2> </div> <form method="post" action="admin" enctype="multipart/form-data" > <input type="hidden" name="page" value="add_product" > <font color="#F24638"><c:out value="${message }"></c:out></font> <div class="signup-group"> <label>Name</label> <input type="text" name="name" placeholder="product name goes here" required> </div> <div class="signup-group"> <label>Price</label> <input type="text" name="price" placeholder="product price" required> </div> <div class="signup-group"> <label>Category</label> <input type="text" name="category" placeholder="product category" required> </div> <div class="signup-group"> <label>Featured</label> <input type="text" name="featured" placeholder="yes/no" required> </div> <div class="signup-group"> <label for="fileupload"> Select an image to upload</label> <input type="file" name="file" required multiple><br> </div> <div class="signup-group"> <input type="submit" value="Add Product"> </div> </form> <footer style="position: relative;top:60px; left: 0;bottom: 0;width: 100%; height:30%"> <div class="footer"> © 2018 Copyright: Zoats.com </div> </footer>
}
////////////////// jsp ////// //////////////////
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String page = request.getParameter("page"); if (page == null) { request.getRequestDispatcher("admin/login.jsp").forward(request, response); ; } else { doPost(request, response); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String page = request.getParameter("page"); if (page.equals("add_product")) { String appPath = "C:/Users/zaid/eclipse-workspace/Ecommerce-shopping/WebContent/"; String savePath = appPath + File.separator + SAVE_DIR; File fileSaveDir = new File(savePath); if (!fileSaveDir.exists()) { fileSaveDir.mkdir(); } Part part1 = request.getPart("file"); String fileName1 = extractFileName(part1); final DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss.SSS"); final Calendar c = Calendar.getInstance(); c.add(Calendar.MILLISECOND, 1); String daformat=df.format(c.getTime()); for (Part part : request.getParts()) { String fileName =extractFileName(part); // refines the fileName in case it is an absolute path if (fileName != null && !"".equals(fileName)) { fileName = new File(fileName).getName(); part.write(savePath + File.separator +""+daformat+""+fileName); } } request.setAttribute("message", "Upload has been done successfully!"); String name = request.getParameter("name"); String price = request.getParameter("price"); String category = request.getParameter("category"); String featured = request.getParameter("featured"); String image = request.getParameter("image"); Product p = new Product(); p.setName(name); p.setPrice(price); p.setCategory(category); p.setFeatured(featured); p.setImage("img/"+image); DB account = new DB(); try { account.addProduct(p); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } JOptionPane.showMessageDialog(null, "Product added Successfully", "Info", JOptionPane.INFORMATION_MESSAGE); request.getRequestDispatcher("admin/index.jsp").forward(request, response); } } private String extractFileName(Part part) { String contentDisp = part.getHeader("content-disposition"); String[] items = contentDisp.split(";"); for (String s : items) { if (s.trim().startsWith("filename")) { return s.substring(s.indexOf("=") + 2, s.length() - 1); } } return ""; }
comment obtenir plusieurs noms d'images dans des colonnes à la fois dans des colonnes de base de données avec le même identifiant d'utilisateur, comme en utilisant une seule requête dans le servlet. user111: 20190416070203.192dellxps15.jpg user111: 20190416070203.199HuaweiMAtebookXpro.jpg user111: 20190416070203.207s10plus.jpg
3 Réponses :
Vous devez mettre le account.addProduct (p);
dans la boucle for
, qui parcourt toutes les pièces jointes.
Vous pouvez créer une liste de chaînes
et ajouter des noms de fichiers dans cette liste. et convertissez cette liste de chaînes en chaînes séparées par des virgules
tout en la stockant dans la base de données
import org.apache.commons.lang3.StringUtils
importez des StringUtils depuis Apache Commons
List<String> fileNames = new ArrayList<>(); for (Part part : request.getParts()) { String fileName =extractFileName(part); // refines the fileName in case it is an absolute path if (fileName != null && !"".equals(fileName)) { fileName = new File(fileName).getName(); part.write(savePath + File.separator +""+daformat+""+fileName); fileNAmes.add(fileName); } } request.setAttribute("message", "Upload has been done successfully!"); String name = request.getParameter("name"); String price = request.getParameter("price"); String category = request.getParameter("category"); String featured = request.getParameter("featured"); String image = request.getParameter("image"); Product p = new Product(); p.setName(name); p.setPrice(price); p.setCategory(category); p.setFeatured(featured); p.setImage(StringUtils.join(fileNames , ','));
Merci ça marche. si vous m'aidez à récupérer toutes ces images de la base de données
pourriez-vous me montrer votre code ?? Il me sera plus facile de vous donner une suggestion si je peux voir votre code.
@Zaid ok alors quel est le problème ici?
Le problème est si ma colonne de base de données a plusieurs noms de fichiers. mon fichier jsp ne peut pas récupérer les images rappelez-vous que je récupère mes images avec les noms d'image
ok, voulez-vous afficher des images réelles en fonction du nom de l'image?
oui je veux afficher des images qui sont multiples dans une colonne de base de données comme img / 20190418125114.839dellxps15.jpg, 20190418125114.839Huawei MAtebookXpro.jpg, 201 90418125114.839s10pl us.jpg en fait si plusieurs noms d'images dans une colonne comment appeler toutes les images dans fichier jsp
vous obtiendrez le nom de l'image sous forme de chaîne. vous devez convertir cette chaîne en liste de chaînes. pour cela, vous pouvez séparer la chaîne par une virgule ",". et après cela, vous pouvez obtenir une image par nom d'image
Dhrumil Patel voici mon fichier jsp dans lequel je récupère des images en utilisant jstl `
public Product fetchProduct(String id) throws SQLException { dbConnect(); String sql = "select * from product where id=?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, id); ResultSet rst = pstmt.executeQuery(); Product p = new Product(); while(rst.next()){ p.setId(rst.getInt("id")); p.setName(rst.getString("name")); p.setPrice(rst.getString("price")); p.setCategory(rst.getString("category")); p.setFeatured(rst.getString("featured")); p.setImage(rst.getString("image")); } dbClose(); return p; }
et voici le code de la classe db
<tr> <td style="width: 50px;"><c:out value="${row.id }"></c:out></td> <td style="width: 100px;"><c:out value="${row.name }"></c:out></td> <td style="width: 100px;"><c:out value="${row.price }"></c:out></td> <td style="width: 100px;"><c:out value="${row.category}"/></td> <td style="width: 100px;"><img src="${row.image}" height="100" width="150" ></td> <td style="width: 100px;"><a href="<%= request.getContextPath() %>/admin?page=edit&id=${row.id}" style="color: #6bb1f8;">edit</a> || <a href="<%= request.getContextPath() %>/admin?page=delete&id=${row.id}" style="color:#6bb1f8;">delete</a></td> </tr> </table> </c:forEach>`
Bonjour Zaid, veuillez modifier votre question pour fournir des suppléments. La section des réponses est destinée uniquement aux réponses.
Avez-vous envisagé de créer une table de fichiers avec une clé étrangère pointant vers l'ID utilisateur?