java - 如何使用 servlet 和 jsp 从任何本地 c 或 d 驱动器或系统的任何文件夹将用户配置文件图像上传到 sql 数据库
问题描述
当我单击提交按钮以插入用户详细信息时,我想将用户个人资料图片的图像上传到 sql 数据库中。我编写代码仅从特定 d 文件夹中获取图像以在此处上传图像 我编写代码以上传图像但出现错误( u.setImage(5, (InputStream)fs1, fs1.available());)我还想从系统的任何驱动器上传图像并存储到 sql 数据库中。
小服务程序编码:
@WebServlet(urlPatterns = {"/Insert"})
public class Insert extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
ServletContext context = getServletContext();
String dirName =context.getRealPath("d://Photo/");
try
{
String name = request.getParameter("name");
String address = request.getParameter("address");
String phone = request.getParameter("phone");
String image = request.getParameter("image");
String password = request.getParameter("password");
String fPath = "d:\\Photo\\" + image;
System.out.println("insert! "+image);
User u=new User();
u.setName(name);
u.setAddress(address);
u.setPhone(phone);
u.setImage(fPath);
u.setPassword(password);
int i=UserDao.save(u);
if(i>0)
{
request.getRequestDispatcher("user-list.jsp").include(request, response);
}
else
{
out.println("Sorry! unable to insert record");
}
}
catch(Exception e)
{
e.printStackTrace();
}
out.close();
}
}
用户道代码:
public static int save(User u) throws FileNotFoundException{
int status=0;
File file1 = null;
FileInputStream fs = null, fs1=null;
String img = u.getImage();
System.out.println("userdao! "+img);
file1 = new File(img);
fs = new FileInputStream(file1);
try{
Connection con=getConnection();
PreparedStatement ps = con.prepareStatement(INSERT_USERS);
ps.setString(1, u.getName());
ps.setString(2, u.getAddress());
ps.setString(3, u.getPhone());
ps.setObject(4, null);
fs = new FileInputStream(img);
System.out.println(fs);
fs1=fs;
ps.setBinaryStream(4, (InputStream)fs1, fs1.available());
ps.setString(5, u.getPassword());
status=ps.executeUpdate();
}catch(Exception e){System.out.println(e);}
return status;
}
解决方案
您不应该将图像真正存储在数据库中。这是一个非常糟糕的做法,数据库的性能会最差。而是使用这种类型的东西:
- 您从用户那里获取图像并将其转换为字节数组
- 您将字节数组发送到服务器
- 然后服务器将字节数组转换为文件并将文件保存到服务器的目录
- 并将文件的位置保存为数据库中的字符串
现在发送给客户端:
- 从存储的位置获取文件
- 将其转换为字节数组
- 将字节数组发送给客户端
推荐阅读
- python - 一维数组和二维数组之间的逐行笛卡尔积
- php - if else 语句(未正确执行)-codeigniter
- neo4j - Neo4j 中用于 GDS 计算的图形生成
- angular - 你如何在角度点击时重复动画?
- reactjs - 刷新页面时在 S3 AWS 上反应应用程序 SPA 显示 404 页面
- c++ - c++ 如何在这种情况下忽略第二条消息
- c - 如何在 SDL2 中显示纹理?
- c# - 在 .NET C# TextBox 中暂时突出显示文本
- database - Esqueleto "where_" 子句中的自定义函数
- javascript - 我可以在 CSS 网格布局中填充空单元格吗?