java - java io FileNotFoundException
问题描述
我正在尝试使用 JSP 将图像上传到 MySQL 数据库。但它以找不到文件异常结束。我该如何解决?Servlet 文件、异常和表在下面.......................... ..................................................... ..................................................... ............. 表
package com.imageUpload.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.imageUpload.utill.DbConnection;
@WebServlet("/ImageUpload")
public class ImageUpload extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name=request.getParameter("name");
String image=request.getParameter("image");
FileInputStream fis=new FileInputStream(new File(image));
Connection con=DbConnection.getConnection();
try {
PreparedStatement ps=con.prepareStatement
("insert into image(name,image)values(?,?)");
ps.setString(1,name);
ps.setBinaryStream(3, fis);
int n = ps.executeUpdate();
if(n>0) {
response.getWriter().println("Successfully Uploaded!");
}
}catch(Exception e) {System.out.println("Image E: "+e);}
}
}
Type Exception Report
Message WS_Logo-02 (1).jpg (The system cannot find the file specified)
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
java.io.FileNotFoundException: WS_Logo-02 (1).jpg (The system cannot find the file specified)
java.io.FileInputStream.open0(Native Method)
java.io.FileInputStream.open(FileInputStream.java:195)
java.io.FileInputStream.<init>(FileInputStream.java:138)
com.imageUpload.controller.ImageUpload.doPost(ImageUpload.java:27)
javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
解决方案
request.getParameter() 方法将返回字符串,但要获取实际图像,您需要获取文件部分输入流。然后通过使用该部分,您可以在服务器上创建图像,并进一步将其作为二进制存储在数据库中。最有效的方法是将所有文件存储在 S3 存储桶等外部存储中,并将路径存储在数据库中。你可以试试下面的代码。
package com.imageUpload.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.imageUpload.utill.DbConnection;
@WebServlet("/ImageUpload")
@MultipartConfig
public class ImageUpload extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name=request.getParameter("name");
InputStream uploadedInputStream = null;
Part filePart = null;
String image = "";
filePart = request.getPart("image"); // Retrieves <input type="file" name="image">
if (filePart != null) {
image = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); //image->name
uploadedInputStream = filePart.getInputStream();
}
FileInputStream fis=new FileInputStream(new File(image));
Connection con=DbConnection.getConnection();
try {
PreparedStatement ps=con.prepareStatement
("insert into image(name,image)values(?,?)");
ps.setString(1,name);
ps.setBinaryStream(3, fis);
int n = ps.executeUpdate();
if(n>0) {
response.getWriter().println("Successfully Uploaded!");
}
}catch(Exception e) {System.out.println("Image E: "+e);}
}
}
推荐阅读
- javascript - 在哪里检查我使用模拟器创建的数据库
- java - 使用 io.vertx.core.json 库在 JAVA 中读取 Json 文件
- google-apps-script - 使用 Google 应用脚本开发 Gmail 插件时,我们如何在 google 中安全地存储数据?
- php - 如何遍历具有不同长度的多维数组 - PHP
- python - 收集值后重置字符串数据
- android - 退出 adb logcat 的 Bash 脚本
- sql - 如何从应用程序的多个实例中从单个数据库中获取数据而不会发生冲突
- java - 如何验证 xlsx 文件和数据库
- tfs - 敏捷任务板和折叠视图中的自定义描述
- typescript - 如何在打字稿中表达混合的临时和参数多态?