使用Servlet实现数据库图片上传 (servlte数据库上传图片)

随着互联网的快速发展,图片的应用越来越广泛,如何将图片上传到数据库已成为当前开发中必备的技能之一。本文将介绍如何,并为大家详细展示实现过程。

一、搭建环境

本文的代码是基于Eclipse JEE版本来实现的,因此需要先下载并安装相应的软件环境。

二、创建项目

创建一个新的Web项目,设置JRE版本,项目构建技术为Maven,并添加相应的依赖,在pom.xml文件中添加以下代码:

“`xml

javax.servlet

javax.servlet-api

3.1.0

provided

org.apache.tomcat

tomcat-dbcp

9.0.0.M4

provided

commons-fileupload

commons-fileupload

1.3.1

compile

commons-io

commons-io

2.4

compile

mysql

mysql-connector-java

5.1.26

provided

org.apache.poi

poi

3.17

org.apache.poi

poi-ooxml

3.17

org.apache.poi

poi-ooxml-schemas

3.17

“`

三、创建数据库

创建一个数据库表,用于存储上传的图片,包含以下字段:

id:作为主键,自增长

file_name:图片的文件名

content_type:图片的类型

file_size:图片的大小

data:图片的字节流

四、编写上传Servlet

编写上传Servlet,上传过程中需要进行以下处理:

获取上传文件的大小及类型,如果不符合规则,直接返回错误信息;

将上传文件转化为字节流,将字节流存入数据库中。

以下是具体实现的代码:

上传文件:

“`java

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType(“text/html;charset=UTF-8”);

PrintWriter out = response.getWriter();

boolean isMultipart = ServletFileUpload.isMultipartContent(request);

if (!isMultipart) {

out.println(“文件未上传!”);

return;

}

String uploadFilePath = request.getServletContext().getRealPath(“/”) + “upload/”;

File uploadFolder = new File(uploadFilePath);

if (!uploadFolder.exists()) {

uploadFolder.mkdirs();

}

DiskFileItemFactory factory = new DiskFileItemFactory();

factory.setRepository(uploadFolder);

ServletFileUpload upload = new ServletFileUpload(factory);

upload.setHeaderEncoding(“UTF-8”);

upload.setSizeMax(MAX_UPLOAD_SIZE);

List items = null;

try {

items = upload.parseRequest(request);

} catch (FileUploadException e) {

e.printStackTrace();

}

if (items == null) {

out.write(“文件未上传!”);

return;

}

for (FileItem item : items) {

if (item.isFormField()) {

continue;

}

String fileName = item.getName();

if (StringUtils.isEmpty(fileName)) {

continue;

}

if (StringUtils.indexOf(fileName, “/”) >= 0) {

fileName = StringUtils.substringAfterLast(fileName, “/”);

}

if (StringUtils.indexOf(fileName, “\\”) >= 0) {

fileName = StringUtils.substringAfterLast(fileName, “\\”);

}

String contentType = item.getContentType();

if (StringUtils.isEmpty(contentType)) {

continue;

}

InputStream inputStream = null;

try {

long fileSize = item.getSize();

if (StringUtils.isEmpty(fileName) || fileSize > MAX_UPLOAD_SIZE) {

return;

}

byte[] fileBuffer = new byte[(int) fileSize];

inputStream = item.getInputStream();

inputStream.read(fileBuffer, 0, (int) fileSize);

Connection conn = getConnection();

PreparedStatement pstmt = conn.prepareStatement(INSERT_QUERY);

pstmt.setString(1, fileName);

pstmt.setString(2, contentType);

pstmt.setLong(3, fileSize);

pstmt.setBytes(4, fileBuffer);

pstmt.executeUpdate();

if (inputStream != null) {

inputStream.close();

}

if (pstmt != null) {

pstmt.close();

}

if (conn != null) {

conn.close();

}

} catch (SQLException ex) {

ex.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

out.print(“文件上传成功!”);

}

}

“`

五、

本文介绍了如何,并通过详细的代码展示了实现过程。如果你也想在项目中实现图片上传功能,可以根据本文的步骤进行操作,相信能够顺利实现。

相关问题拓展阅读:

c#如何将图片保存到mysql数据库,再读取出来?

直接将图片以二进制流的方式写入到mysql数据库中,由于数据量大,必然会导致服务器的数据库负载很大

我的建议: 采取将图片存储在物理磁盘 将相对路径存储在数据库中 这样会减小数据库负载

附上  “上传图片” 代码:

/// 

/// 上传图片

/// 

    升森巧    /// 文件框名称

/// 上传文件路径,url

/// 文件的更大值,单位为字节

/// 类型:1表示图片;0表示所有文件

      春冲  /// 

public static string upfiles(System.Web.UI.HtmlControls.HtmlInputFile files, string paths, long fmax, string ftype)

{

//files 文件上传组件的名称;paths 要上传到的目录;fmax是上传文件更大值;ftype是上传文件的类型

//默认上传文件更大值100k,文件类型为所有文件

//1为图片jpg or gif;0为所有文件

//如果文件大于设定值,返回代码0

//如果文件类型错误,返回代码1

//初始化

long fileMax =;

string fileType = “0”;

string fileTypet = “”;

fileMax = fmax;

fileType = ftype;

if (files.PostedFile.ContentLength > fileMax)

吵键   {

  return “0”;

  //返回错误代码,结束程序

}

fileTypet = System.IO.Path.GetExtension(files.PostedFile.FileName).ToLower();

if (fileType == “1”)

{

  if (fileTypet != “.jpg” && fileTypet != “.jpeg” && fileTypet != “.gif”)

  {

      return “1”;

      //返回错误代码,结束程序

  }

}

string destdir = System.Web.HttpContext.Current.Server.MapPath(paths);

string filename = CFun.RandomWord() + fileTypet;

string destpath = System.IO.Path.Combine(destdir, filename);

//检查是否有名称重复,如果重复就在前面加从0开始的数字

int i = 0;

string tempfilename = filename;

while (System.IO.File.Exists(destpath))

{

  //有重复

  tempfilename = i.ToString() + filename;

  destpath = System.IO.Path.Combine(destdir, tempfilename);

  i = i + 1;

}

//没有重复,保存文件

files.PostedFile.SaveAs(destpath);

//返回文件名称

return tempfilename;

}

servlte数据库上传图片的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于servlte数据库上传图片,使用Servlet实现数据库图片上传,c#如何将图片保存到mysql数据库,再读取出来?的信息别忘了在本站进行查找喔。


数据运维技术 » 使用Servlet实现数据库图片上传 (servlte数据库上传图片)