随着互联网的快速发展,图片的应用越来越广泛,如何将图片上传到数据库已成为当前开发中必备的技能之一。本文将介绍如何,并为大家详细展示实现过程。
一、搭建环境
本文的代码是基于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(“文件上传成功!”);
}
}
“`
五、
本文介绍了如何,并通过详细的代码展示了实现过程。如果你也想在项目中实现图片上传功能,可以根据本文的步骤进行操作,相信能够顺利实现。
相关问题拓展阅读:
直接将图片以二进制流的方式写入到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数据库,再读取出来?的信息别忘了在本站进行查找喔。
香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。
网页名称:使用Servlet实现数据库图片上传(servlte数据库上传图片)
文章URL:http://www.mswzjz.cn/qtweb/news23/346823.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能