我正在尝试将包含图像文件的表单数据从 java 脚本发送到 java servlet 过滤器。以下是ajax请求的代码
function displayCard() {
addProductBtn.disabled = true;
event.preventDefault();
if(checkProductName(productNameField,productNameError)
&& checkProductImage(productImageField,productImageError)
&& checkDescription(productDescField,productDescError,counter)
&& checkPrice(productPriceField,productPriceError)
&& checkDiscount(productDiscountField,productDiscountError)) {
var request = new XMLHttpRequest();
request.open("POST","product/add",true);
request.setRequestHeader("Content-Type","multipart/form-data");
// Set the Content-Type header to multipart/form-data
var formData = new FormData();
formData.append("productName", productNameField.value.trim());
formData.append("productImage", productImageField.files[0]);
formData.append("productDescription", productDescField.value.trim());
formData.append("productPrice", productPriceField.value.trim());
formData.append("productDiscount", productDiscountField.value.trim());
request.send(formData);
request.onreadystatechange = function(){
if(request.readyState === XMLHttpRequest.DONE) {
if(request.status === 200){
var data = JSON.parse(request.responseText);
if(data.success){
closeForm();
createItemCard(data.success.id);
showAlert("Added successfully!","#15A78C","#DFFFD8","#A0E4CB");
}
else{
productNameError.innerText =data.errors.nameError;
productImageError.innerText =data.errors.imageError;
productDescError.innerText = data.errors.descriptionError;
productPriceError.innerText = data.errors.priceError;
productDiscountError.innerText = data.errors.discountError;
}
}else{
///Error message
showAlert("Oops! Something went wrong.","#FFFFFF","#FF7C7C","#E52315");
}
}
};
}
addProductBtn.disabled = false;
}
但是当我试图在我的 java 过滤器中检索表单信息时,我得到了 null。 我正在检索如下信息,
package com.clothify.filters;
import com.clothify.controller.ImageHandler;
import com.clothify.filters.supporter.ErrorTextGenerator;
import com.clothify.filters.supporter.Validator;
import org.json.JSONObject;
import javax.servlet.ServletException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.PrintWriter;
@MultipartConfig
public class ProductValidator implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String method = request.getMethod();
PrintWriter out = null;
if(method.equals("POST") || method.equals("PUT")) {
try {
out = response.getWriter();
String productName = request.getParameter("productName");
Part imageFile = request.getPart("productImage");
String productDescription = request.getParameter("productDescription");
String productPrice = request.getParameter("productPrice");
String productDiscount = request.getParameter("productDiscount");
byte[] imageBytes = ImageHandler.getImageBytes(imageFile);
JSONObject result = new JSONObject();
if (!Validator.isNameValid(productName)) {
result.put("nameError", ErrorTextGenerator.getNameErrorText(productName));
}
if (!Validator.isImageValid(imageBytes)) {
result.put("imageError", ErrorTextGenerator.getImageErrorText(imageBytes));
}
if (!Validator.isDescriptionValid(productDescription)) {
result.put("descriptionError", ErrorTextGenerator.getDescriptionErrorText(productDescription));
}
if (!Validator.isPriceValid(productPrice)) {
result.put("priceError", ErrorTextGenerator.getPriceErrorText(productPrice));
}
if (!Validator.isDiscountValid(productDiscount)) {
result.put("discountError", ErrorTextGenerator.getDiscountErrorText(productDiscount));
}
if (result.length() > 0) {
out.println("{\"result\": " + result + " }");
}
else{
double price = Double.parseDouble(productPrice);
int discount = Integer.parseInt(productDiscount);
request.setAttribute("productPrice",price);
request.setAttribute("productDiscount",discount);
request.setAttribute("productImage",imageBytes);
}
}
catch (ServletException e){e.printStackTrace();}
catch (IOException e){e.printStackTrace();}
finally {
if(out!=null){
out.close();
}
}
}
try {
filterChain.doFilter(request,response);
}
catch (IOException e) {e.printStackTrace(); }
catch (ServletException e) {e.printStackTrace();}
}
}
我检查了浏览器中的网络选项卡,请求负载包含我在表单中提供的所有信息。但是当我试图在我的 java 过滤器中检索它时,我得到了 null。