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
版权声明:本文标题:adobe exprience manager - How to upload assets from frontend in AEM 6.5.18? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744514786a2610095.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论