使用 ajax 上传文件并使用 java servlet 服务器端处理它
Uploading file using ajax and handling it with a java servlet server-side
过去几天我一直被这个问题困扰,其他帖子都没有帮助。
我正在尝试在 HTML 表单上上传一个文件,它看起来像这样(它包含其他字段):
<input type="text" id="prenom" name="fname" placeholder="Prenom"><br><br>
<input type="text" id="nom" name="fname" placeholder="Nom"><br><br>
<input type="email" id="mail" name="fname" placeholder="Adresse mail"><br><br>
<input type="file" id="file" name="file" />
</form>
<br><button id="bouton-inscription" >s'inscrire</button>```
然后通过 FormData 上传到使用 Ajax:
var formData = new FormData();
formData.append('file', $('#file')[0].files[0]);
$.ajax({
url: './upload',
cache: false,
processData: false,
contentType: false,
method: 'POST',
data: formData,
dataType: 'json'
})
然后,在服务器端,我想检索文件并使用 httpServlet 保存它,我正在使用我从 Oracle 文档“改编”的代码:
@WebServlet(name = "FileUploadServlet", urlPatterns = {"/upload"})
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
// Create path components to save the file
final String path = "C:\Users\me\Desktop";
final Part filePart = request.getPart("file");
final String fileName = "myFile";
OutputStream out = null;
InputStream filecontent = null;
final PrintWriter writer = response.getWriter();
try {
out = new FileOutputStream(new File(path + File.separator
+ fileName));
filecontent = filePart.getInputStream();
int read = 0;
final byte[] bytes = new byte[1024];
while ((read = filecontent.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
writer.println("New file " + fileName + " created at " + path);
} catch (FileNotFoundException fne) {
writer.println("You either did not specify a file to upload or are "
+ "trying to upload a file to a protected or nonexistent "
+ "location.");
writer.println("<br/> ERROR: " + fne.getMessage());
} finally {
if (out != null) {
out.close();
}
if (filecontent != null) {
filecontent.close();
}
if (writer != null) {
writer.close();
}
}
}
但是我在 Ajax 调用中遇到一个错误(我正在处理其他字段,另一个 ajax 调用另一个 servlet,因为它们是文本字段所以工作得很好).
我觉得问题一定出在服务器端,因为我在客户端使用的代码随处可见。
如有任何提示,我们将不胜感激!
谢谢!
编辑:
实际上,使用此代码可以正确保存文件,但仍然存在 Ajax 错误
问题是两次 ajax 调用,每个调用都有一个 .done,通过不期望来自文件上传 ajax 调用的答案,而是期望一个(将用户重定向到另一页)来自提交信息的其余部分。
过去几天我一直被这个问题困扰,其他帖子都没有帮助。 我正在尝试在 HTML 表单上上传一个文件,它看起来像这样(它包含其他字段):
<input type="text" id="prenom" name="fname" placeholder="Prenom"><br><br> <input type="text" id="nom" name="fname" placeholder="Nom"><br><br> <input type="email" id="mail" name="fname" placeholder="Adresse mail"><br><br> <input type="file" id="file" name="file" /> </form> <br><button id="bouton-inscription" >s'inscrire</button>```
然后通过 FormData 上传到使用 Ajax:
var formData = new FormData();
formData.append('file', $('#file')[0].files[0]);
$.ajax({
url: './upload',
cache: false,
processData: false,
contentType: false,
method: 'POST',
data: formData,
dataType: 'json'
})
然后,在服务器端,我想检索文件并使用 httpServlet 保存它,我正在使用我从 Oracle 文档“改编”的代码:
@WebServlet(name = "FileUploadServlet", urlPatterns = {"/upload"})
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
// Create path components to save the file
final String path = "C:\Users\me\Desktop";
final Part filePart = request.getPart("file");
final String fileName = "myFile";
OutputStream out = null;
InputStream filecontent = null;
final PrintWriter writer = response.getWriter();
try {
out = new FileOutputStream(new File(path + File.separator
+ fileName));
filecontent = filePart.getInputStream();
int read = 0;
final byte[] bytes = new byte[1024];
while ((read = filecontent.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
writer.println("New file " + fileName + " created at " + path);
} catch (FileNotFoundException fne) {
writer.println("You either did not specify a file to upload or are "
+ "trying to upload a file to a protected or nonexistent "
+ "location.");
writer.println("<br/> ERROR: " + fne.getMessage());
} finally {
if (out != null) {
out.close();
}
if (filecontent != null) {
filecontent.close();
}
if (writer != null) {
writer.close();
}
}
}
但是我在 Ajax 调用中遇到一个错误(我正在处理其他字段,另一个 ajax 调用另一个 servlet,因为它们是文本字段所以工作得很好).
我觉得问题一定出在服务器端,因为我在客户端使用的代码随处可见。
如有任何提示,我们将不胜感激!
谢谢!
编辑: 实际上,使用此代码可以正确保存文件,但仍然存在 Ajax 错误
问题是两次 ajax 调用,每个调用都有一个 .done,通过不期望来自文件上传 ajax 调用的答案,而是期望一个(将用户重定向到另一页)来自提交信息的其余部分。