0
votes

comment obtenir plusieurs noms de fichiers dans les colonnes de la base de données à la fois? j'écris un code qui télécharge plusieurs fichiers

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"> &copy; 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


1 commentaires

Avez-vous envisagé de créer une table de fichiers avec une clé étrangère pointant vers l'ID utilisateur?


3 Réponses :


0
votes

Vous devez mettre le account.addProduct (p); dans la boucle for , qui parcourt toutes les pièces jointes.


0 commentaires

1
votes

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 , ','));


7 commentaires

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



-1
votes

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>`


1 commentaires

Bonjour Zaid, veuillez modifier votre question pour fournir des suppléments. La section des réponses est destinée uniquement aux réponses.