admin管理员组

文章数量:1384383

I have created a java servlet that uploads assets to the JCR and I checked with postman and it is working but when I am trying to upload from a component that i created I am getting 403, I thought that the issue would be auth as I had to add basic auth in postman to serve the request but even after adding auth I am getting 403, Please help, please don't cook me I'm new to AEM.

Java Servlet


import .apache.sling.api.SlingHttpServletRequest;
import .apache.sling.api.SlingHttpServletResponse;
import .apache.sling.api.servlets.SlingAllMethodsServlet;
import .apache.sling.servlets.annotations.SlingServletPaths;
import .osgi.serviceponent.annotations.Component;
import .apache.sling.api.request.RequestParameter;
import javax.jcr.Node;
import javax.jcr.Session;
import javax.jcr.Binary;
import javax.servlet.ServletException;
import java.io.IOException;
import .slf4j.Logger;
import .slf4j.LoggerFactory;

@Component(service = javax.servlet.Servlet.class)
@SlingServletPaths(value = { "/bin/imageUpload" })
public class ImageUploadServlet extends SlingAllMethodsServlet {

    private static final Logger log = LoggerFactory.getLogger(ImageUploadServlet.class);

    @Override
    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response)
            throws ServletException, IOException {

        RequestParameter fileParam = request.getRequestParameter("file");
        String imageType = request.getParameter("imageType");
        String assetCategory = request.getParameter("assetCategory");

        
        if (fileParam == null || imageType == null || assetCategory == null || fileParam.getSize() == 0) {
            response.getWriter().write("Missing file, imageType, or assetCategory parameter.");
            return;
        }

        
        if (!("creative".equalsIgnoreCase(assetCategory) || "document".equalsIgnoreCase(assetCategory))) {
            response.getWriter().write("Invalid assetCategory. Allowed values: creative or document.");
            return;
        }

        String originalFileName = fileParam.getFileName();
        if (originalFileName == null || originalFileName.trim().isEmpty()) {
            response.getWriter().write("File name is empty.");
            return;
        }

        
        String sanitizedFileName = originalFileName.replaceAll("\\s+", "_");

        Session session = request.getResourceResolver().adaptTo(Session.class);
        try {
            
            Node assetFolderNode = getOrCreate DamAssetNode(session, assetCategory);

            
            Node typeNode;
            if (assetFolderNode.hasNode(imageType)) {
                typeNode = assetFolderNode.getNode(imageType);
            } else {
                typeNode = assetFolderNode.addNode(imageType, "sling:Folder");
            }

            
            Node imageNode = typeNode.addNode(sanitizedFileName, "nt:unstructured");

            
            imageNode.setProperty("assetCategory", assetCategory);
            imageNode.setProperty("imageType", imageType);

            
            Node contentNode = imageNode.addNode("jcr:content", "nt:resource");
            Binary binary = session.getValueFactory().createBinary(fileParam.getInputStream());
            contentNode.setProperty("jcr:data", binary);
            contentNode.setProperty("jcr:mimeType", fileParam.getContentType());

            session.save();

            response.getWriter().write("Image uploaded successfully!");
            log.info("Image uploaded to {} under type {} in asset category {}",
                    imageNode.getPath(), imageType, assetCategory);
        } catch (Exception e) {
            log.error("Error uploading image", e);
            response.getWriter().write("Error uploading image: " + e.getMessage());
        }
    }

    
    private Node getOrCreate DamAssetNode(Session session, String assetCategory) throws Exception {
        if (!session.nodeExists("/content/ -dam")) {
            Node contentNode = session.getNode("/content");
            contentNode.addNode(" -dam", "sling:Folder");
            session.save();
        }

        Node  DamNode = session.getNode("/content/ -dam");
        String assetFolderName = assetCategory.toLowerCase() + "-assets"; 

        if (! DamNode.hasNode(assetFolderName)) {
             DamNode.addNode(assetFolderName, "sling:Folder");
            session.save();
        }
        return  DamNode.getNode(assetFolderName);
    }
}

Javascript

    const showUploadFormBtn = document.getElementById('showUploadFormBtn');
    const uploadFormContainer = document.getElementById('uploadFormContainer');
    const uploadAssetForm = document.getElementById('uploadAssetForm');
  
    if (showUploadFormBtn && uploadFormContainer) {
      showUploadFormBtn.addEventListener('click', function() {
        uploadFormContainer.style.display = (uploadFormContainer.style.display === 'none') ? 'block' : 'none';
      });
    }
  
    if (uploadAssetForm) {
      uploadAssetForm.addEventListener('submit', async function(e) {
        e.preventDefault();
  
        const file = document.getElementById('fileInput').files[0];
        const imageType = document.getElementById('imageTypeInput').value.trim();
        const assetCategory = document.getElementById('assetCategory').value;
  
        if (!file) {
          alert('Please select a file.');
          return;
        }
        if (!imageType) {
          alert('Please enter an image type.');
          return;
        }
  
        const formData = new FormData();
        formData.append('file', file);
        formData.append('imageType', imageType);
        formData.append('assetCategory', assetCategory);
  
        try {
          const result = await fetch('http://localhost:4502/bin/imageUpload', {
            method: 'POST',
            body: formData,
            
            credentials: 'include'
          });
          const text = await result.text();
          alert(text);
          uploadAssetForm.reset();
          uploadFormContainer.style.display = 'none';
        } catch (error) {
          console.error('Upload error:', error);
          alert('Upload failed. Check console for details.');
        }
      });
    }
  });

本文标签: adobe exprience managerHow to upload assets from frontend in AEM 6518Stack Overflow