如何将上传的文件保存到数据库中 (上传文件怎么保存到数据库)
随着互联网的快速发展和大数据时代的到来,人们对于网站或应用程序的需求也不断增加,其中对于文件上传功能的需求也越来越大。然而,传统的文件上传只能将文件存储到服务器的文件系统上,对于管理和维护都存在一定的困难。因此,将上传的文件保存到数据库中已成为一种较为流行的文件管理方式。本文将介绍。
一、创建数据库表格
在将上传的文件保存到数据库中前,必须创建一个数据库表格。这个表格将存储文件的相关信息。表格的结构如下:
CREATE TABLE `upload_file` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`file_name` varchar(200) NOT NULL,
`file_type` varchar(50) NOT NULL,
`file_size` int(11) NOT NULL,
`file_content` longblob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
以上表格中的字段:id表示文件的编号,file_name表示文件名称,file_type表示文件类型,file_size表示文件大小,file_content则是文件内容,这里采用longblob类型存储。
二、编写上传文件页面
在编写上传文件页面时,需要使用到表格的结构信息。为了更好地操作数据库,我们需引入一些数据库处理的类。
需要引用的文件包如下:
import java.io.*;
import java.sql.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.*;
import javax.naming.*;
以下是上传文件的主要代码:
@WebServlet(name = “UploadServlet”, urlPatterns = { “/UploadServlet” })
@MultipartConfig
public class UploadServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
String fileName = “”;
String fileType = “”;
int fileSize = 0;
InputStream fileContent = null;
Part filePart = request.getPart(“file”);
if (filePart != null) {
fileName = filePart.getSubmittedFileName();
fileType = filePart.getContentType();
fileSize = (int) filePart.getSize();
fileContent = filePart.getInputStream();
}
if (fileName.equals(“”)) {
out.println(“
Please select a file.
“);
return;
}
Connection conn = null;
PreparedStatement stmt = null;
try {
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(“java:comp/env/jdbc/MySQLDB”);
conn = ds.getConnection();
stmt = conn.prepareStatement(“INSERT INTO upload_file(file_name, file_type, file_size, file_content) VALUES (?, ?, ?, ?)”);
stmt.setString(1, fileName);
stmt.setString(2, fileType);
stmt.setInt(3, fileSize);
stmt.setBinaryStream(4, fileContent, fileSize);
stmt.execute();
out.println(“
Upload successfully.
“);
} catch (Exception e) {
out.println(“
Error: ” + e.getMessage() + “
“);
} finally {
try {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {}
}
}
}
以上代码中,我们首先获取上传的文件信息,如文件名、文件类型、文件大小和文件内容等。接着,我们获取数据源,从而得到数据库连接。我们将文件的信息插入到数据库表格中。
三、浏览上传的文件
为了查看数据库中已上传的文件,我们需要构建一个用来显示上传文件列表的页面。这个页面需要连接数据库,并从数据库中获取文件列表信息,并显示到页面中。
以下是用来显示文件列表的代码:
@WebServlet(name = “FileListServlet”, urlPatterns = { “/FileListServlet” })
public class FileListServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(“java:comp/env/jdbc/MySQLDB”);
conn = ds.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(“SELECT * FROM upload_file”);
out.println(“
“);
out.println(“
“);
out.println(“
“);
out.println(“
“);
out.println(“
“);
out.println(“
“);
while (rs.next()) {
int id = rs.getInt(“id”);
String fileName = rs.getString(“file_name”);
String fileType = rs.getString(“file_type”);
int fileSize = rs.getInt(“file_size”);
out.println(“
“);
out.println(“
“);
out.println(“
“);
out.println(“
“);
out.println(“
“);
out.println(“
“);
}
out.println(“
out.println(“
out.println(“
out.println(“
ID | FileName | FileType | FileSize | Download |
---|---|---|---|---|
” + id + “ | ” + fileName + “ | ” + fileType + “ | ” + fileSize + “ | Download |
“);
} catch (Exception e) {
out.println(“
Error: ” + e.getMessage() + “
“);
} finally {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {}
}
}
}
以上代码中,我们首先获取数据源,并连接数据库。接着,我们查询数据库中的文件列表信息,并将其显示到页面中。如果用户想下载文件,我们可以提供一个链接,使用户可以下载文件。在链接中,我们也会传入文件编号,以便告诉下载程序需要下载哪个文件。
四、下载文件
为了下载数据库中的文件,我们需要编写一个下载文件的Servlet程序。在这个程序中,我们首先根据文件的编号从数据库中查找文件信息,然后发回给客户端下载。以下是下载文件的Servlet程序:
@WebServlet(name = “DownloadServlet”, urlPatterns = { “/DownloadServlet” })
public class DownloadServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“application/octet-stream”);
PrintWriter out = response.getWriter();
String fileId = request.getParameter(“id”);
if (fileId == null || fileId.equals(“”)) {
out.println(“
Wrong file ID.
“);
return;
}
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(“java:comp/env/jdbc/MySQLDB”);
conn = ds.getConnection();
stmt = conn.prepareStatement(“SELECT * FROM upload_file WHERE id = ?”);
stmt.setInt(1, Integer.parseInt(fileId));
rs = stmt.executeQuery();
if (!rs.next()) {
out.println(“
File doesn’t exist.
“);
return;
}
String fileName = rs.getString(“file_name”);
String fileType = rs.getString(“file_type”);
InputStream fileContent = rs.getBinaryStream(“file_content”);
response.setHeader(“Content-Disposition”, “attachment;filename=” + fileName);
response.setContentType(fileType);
OutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
int bytesRead = -1;
while ((bytesRead = fileContent.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
} catch (Exception e) {
out.println(“
Error: ” + e.getMessage() + “
“);
} finally {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {}
}
}
}
以上代码中,我们从请求中获取下载的文件编号,然后连接数据库,查找该文件的信息,最后将文件的内容发回给客户端供下载。
:
本文介绍了。需要注意的是,在存储文件到数据库过程中,必须将文件的内容存储为二进制字节数组,同时需要注意数据库表格中的每个字段的属性定义。此外,为了方便我们将文件浏览和下载,我们还需要编写相应的页面和程序来实现这些功能。
相关问题拓展阅读:
- asp.net怎么上传文件并将文件路径保存到数据库呢?
asp.net怎么上传文件并将文件路径保存到数据库呢?
使用Upload控件:
string UserDirectory = “news”;//存放图片的文件夹
string UserPath = Server.MapPath(“../UploadFiles”).ToString() + “\\” + UserDirectory + “\\” + “新闻” + “\\” + “Img” + “\\” + DateTime.Now.ToString(“yyyy”) + DateTime.Now.ToString(“MM”);//图片存放路径
string ImgFileName;
string FileName;
string FileType;
string UploadImgName = FileUploadImg.PostedFile.FileName; //文件在本地的原始位置
FileName = UploadImgName.Substring(UploadImgName.LastIndexOf(‘\\’) + 1).ToString();//得到文件名
FileType = UploadImgName.Substring(UploadImgName.LastIndexOf(“.”) + 1);//得到后缀名
if (StringFun.GetimgFileName.Getimg(FileUploadImg, UserPath, out ImgFileName))
{
imgDataUrl = “UploadFiles/” + UserDirectory + “/” + “新闻” + “/” + “Img” + “/” + DateTime.Now.ToString(“yyyy”) + DateTime.Now.ToString(“MM”) + “/” + ImgFileName;//数据库存放路径
}
上传文件怎么保存到数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于上传文件怎么保存到数据库,如何将上传的文件保存到数据库中,asp.net怎么上传文件并将文件路径保存到数据库呢?的信息别忘了在本站进行查找喔。
香港服务器首选后浪云,2H2G首月10元开通。
后浪云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。