내가 mutliple 파일의 jquery.ajax 포스트를 수행 한 후 서블릿에 의해 반환되는 일부 HTML을로드하는 데 문제가 있어요에 jquery.ajax의 POST를 수행 한 후 HTML 응답을로드 할 수 없습니다.브라우저는 서블릿
파일 (사진)을 업로드 할 수 있습니다. 나는 사진의 일부 처리를 수행하고 사진에서 일부 메타 데이터를 추출하는 서블릿을 가지고있다. 사진을 처리 한 후 추출 된 메타 데이터 중 일부를 JSP로 전달하여 결국 브라우저로 반환하려고합니다.
이 모든 것이 정상적으로 작동합니다. 내 데이터로 요청 개체를로드하고이를 내 JSP로 리디렉션합니다. 그러나 ... JSP가 브라우저에 응답 할 때마다 페이지가로드되지 않습니다.
나는 JSP 제대로 HTML 나는 그것을 원하는 방식으로 생성하는 것을 볼 수 있으며, 브라우저가 응답 HTML 텍스트를 가져 불을 지르고 사용 ... 그냥 페이지를로드하지 않습니다. 페이지는 원래 있던 위치에 머물러 있기 때문에 Firebug에서 응답의 HTML 텍스트를 볼 수 있습니다.
어떤 아이디어가 문제 일 수 있으십니까? 여기에 ... 관련 코드의 일부입니다 제가 위에서 언급 한 바와 같이
서블릿에 파일을 업로드자바 스크립트 기능 ...
function uploadPictures() {
var input = document.getElementById('filesToUpload');
var fileList = [];
var files = new FormData();
for(var i = 0; i < input.files.length; i++) {
files.append("file", input.files[i]);
}
$.ajax({
type : "POST",
url : "/uploadPhotos",
data : files,
dataType : "HTML",
processData : false,
contentType : false
});
}
서블릿 코드
@MultipartConfig
public class UploadPhotosServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String url = "/uploadForm.jsp";
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(url);
String basePath = getInitParameter("photosRoot");
HashMap<String,String> files = new HashMap<String,String>();
java.util.Collection<Part> parts = request.getParts();
for (Part part : parts) {
String filename = getFilename(part);
InputStream fileContent = part.getInputStream();
OutputStream outFile = new FileOutputStream(new File(basePath + "screen/" + filename));
int read = 0;
byte[] bytes = new byte[1024];
while((read = fileContent.read(bytes)) != -1) {
outFile.write(bytes, 0, read);
}
fileContent.close();
outFile.flush();
outFile.close();
File img = new File(basePath + "screen/" + filename);
File thumb = new File(basePath + "screen/thumbnails/" + filename);
try {
Metadata metadata = ImageMetadataReader.readMetadata(img);
for(Directory directory : metadata.getDirectories()) {
if(directory.containsTag(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL)) {
Date date = directory.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
files.put(filename, sdf.format(date));
break;
} else if(directory.containsTag(ExifIFD0Directory.TAG_DATETIME)) {
Date date = directory.getDate(ExifIFD0Directory.TAG_DATETIME);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
files.put(filename, sdf.format(date));
break;
}
}
BufferedImage buffImg = ImageIO.read(img);
BufferedImage buffThumb = Scalr.resize(buffImg, 150);
ImageIO.write(buffThumb, "jpg", thumb);
} catch (IOException e) {
e.printStackTrace();
} catch (ImageProcessingException e) {
e.printStackTrace();
}
}
request.setAttribute("files", files);
dispatcher.forward(request, response);
}
private static String getFilename(Part part) {
for (String cd : part.getHeader("content-disposition").split(";")) {
if (cd.trim().startsWith("filename")) {
String filename = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
return filename.substring(filename.lastIndexOf('/') + 1).substring(filename.lastIndexOf('\\') + 1); // MSIE fix.
}
}
return null;
}
}
의 JSP 그 리디렉션은 (uploadForm.jsp
)로 잘 생성됩니다. Firebug는 서블릿 호출의 응답에 HTML 코드를 표시합니다 ... 그러나 브라우저는 업로드 양식이있는 페이지에 머물러 있습니다.
도움 주셔서 감사합니다.
아약스를 할 때 페이지가로드되지 않아야합니다. 그게 포인트 야. 페이지가 다시로드되지 않아. 페이지를 새로 고치려면 아약스를 사용하지 마십시오. 그렇지 않으면 성공 콜백 내에서 요청에서 반환 된 내용에 액세스 할 수 있습니다. –
여러 파일을 서버에 업로드하는 방법을 웹에서 검색 할 때 AJAX 메소드 만 가져옵니다. 나는 XmlHttpRequest 객체를 사용해 보았지만 동일한 결과를 보았다. "비 아약스"방식으로 어떻게하면 좋을까요? – Funkytown
과 같은 양식을 작성하십시오. 예를 들어,
'을 입력하고 파일 입력을 파일로 이동 한 후 양식의 제출 이벤트를 트리거하십시오. –