Java上传文件到数据库「建议收藏」

Java上传文件到数据库「建议收藏」Java上传文件到数据库   首先在开始本文之前推荐一篇我非常喜欢的博主——孤傲苍狼的一篇相关博文。     JavaWeb学习总结(五十)——文件上传和下载        http://www.cnblogs.com/xdp-gacl/p/4200090.html     本文主要介绍如何将文件上传到服务器,并以二进制字符流的形式存入数据库。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

                                                                          Java上传文件到数据

     首先在开始本文之前推荐一篇我非常喜欢的博主——孤傲苍狼的一篇相关博文。

          JavaWeb学习总结(五十)——文件上传和下载 

          http://www.cnblogs.com/xdp-gacl/p/4200090.html

         本文主要介绍如何将文件上传到服务器,并以二进制字符流的形式存入数据库。

          初始准备,MySQL数据库,新建表test,添加字段longblob字段。

          1. 页面代码:closedLoopInfo.jsp

<%@ page contentType="text/html; charset=utf-8" language="java"
	import="java.sql.*" errorPage=""%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%
    String path = request.getContextPath();
    // 获得本项目的地址(例如: http://localhost:8080/MyApp/)赋值给basePath变量    
    String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
    // 将 "项目路径basePath" 放入pageContext中,待以后用EL表达式读出。    
    pageContext.setAttribute("basePath", basePath);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<script type="text/javascript" src="<%=basePath%>static/js/jquery.min.js"></script>
<script src="<%=basePath%>static/js/My97DatePicker/WdatePicker.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
<script type="text/javascript">
   function CheckFile(obj) {
		var filname = $(".fil").val();
		var array = new Array('pdf', 'xlsx', 'docx', 'txt', 'pptx', 'jpg',
				'jpeg', 'xls', 'doc'); //可以上传的文件类型
		var fileContentType = obj.value.match(/^(.*)(\.)(.{1,8})$/)[3]; //这个文件类型正则很有用
		var isExists = false;
		for ( var i in array) {
			if (fileContentType.toLowerCase() == array[i].toLowerCase()) {
				isExists = true;
				alert("文件类型正确");
				return true;
			};
		}
		if (isExists == false) {
			obj.value = null;
			alert("上传文件类型需为pdf,xlsx,docx,txt,pptx,jpg,jpeg,xls,doc!");
			return false;
		}
		return false;
	}
</script>
</head>

<body>
	<div class="main" style="background-color:#e4e4e4;">
		<table class="tab">
			<tr style="height:50px;">
				<td></td>
				<td style="text-align:center;vertical-align:middle;"><label
					style="align:center;width:200%;border-style:solid;border-color:#B0B0B0;border-width:thin;">方案附件上传:</label>
				</td>
				<td></td>
				<td>
				  <form id="fieForm" method="post" enctype="multipart/form-data" action="<%=basePath%>uploadQuestionFile.do" >
    	            <div class="bmbut" id="bmbut1">
    	              <input class="fil" name="single" type="file" οnchange="CheckFile(this)"/>
                      <input class="subm" type="submit" value="上传" />
                    </div>
                  </form>
                </td>
				<td></td>
				<td></td>
			</tr>
		</table>
	</div>
</body>
</html>

       
2.附件上传(uploadQuestionFile.do)

   // 获取本地第二个磁盘绝对路径,用来存取临时文件
    public String getDisk() {
	String result = "";
	int count = 0;
	for (File f : File.listRoots()) {
	    result = f.getAbsolutePath();
	    count++;
	    if (count == 2)
		break;
	}
	return result;
    }
    
    // 附件上传
    @SuppressWarnings("rawtypes")
    @RequestMapping("uploadQuestionFile.do")
    public String uploadQuestionFile(HttpServletRequest request)
	    throws ServletException, IOException {
	boolean isMultipart = ServletFileUpload.isMultipartContent(request);
	if (isMultipart) {
	    DiskFileItemFactory factory = new DiskFileItemFactory();
	    // factory.setSizeThreshold(1024 * 10);

	    // 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录
	    // factory.setRepository(new File("f:\\test"));  // 临时文件

	    // 用上面的工厂实例化上传组件,
	    ServletFileUpload upload = new ServletFileUpload(factory);

	    // 设置最大上传大小 10M
	    upload.setSizeMax(1024 * 1024 * 5);
	    String name = "";
	    try {
		List items = upload.parseRequest(request); // 得到所有FileItem
		// 上传文件的个数
		Iterator iter = items.iterator();
		
		// 循环处理所有文件
		while (iter.hasNext()) {
		    FileItem item = (FileItem) iter.next();
		    System.out.println("Item:" + item);
		    // 判断是否是表单元素(<input type="text" />单选,多选等)
		    if (!item.isFormField()) {
			// 得到文件的名称
			name = item.getName();
			// 文件长度
			//long size = item.getSize();  // 过滤大小
			if (name == null || "".equals(name.trim())) {
			    // 未选择上传文件
			    continue;
			}
			// 以下为文件名处理,将上传的文件保存在项目所在目录下。
			// 获取文件名字符串的长度
			// int end = name.length();
			// 返回在此字符串中最右边出现的指定子字符串的索引。
			int begin = name.lastIndexOf("\\");

			// int start = name.lastIndexOf(".");
			// 输出上传文件类型,此处可以进行类型的过滤
			//
			// System.out.println(application.getRealPath("/js")+System.getProperty("file.separator")+name.substring(begin
			// + 1));
			// File file = new File("f:\\"+name.substring(begin + 1,
			// end));
			
			File file = new File("");
			file = new File(getDisk()+ name.substring(begin + 1));
			item.write(file);
			System.out.println("1.name:" + name);
			System.out.println("2.file:" + file);
			byte[] buffer = null;
			try {
			    FileInputStream fis = new FileInputStream(file);
			    ByteArrayOutputStream bos = new ByteArrayOutputStream(
				    1024);
			    byte[] b = new byte[1024];
			    int n;
			    while ((n = fis.read(b)) != -1) {
				bos.write(b, 0, n);
			    }
			    fis.close();
			    bos.close();
			    buffer = bos.toByteArray();
			} catch (Exception e) {
			    e.printStackTrace();
			}
			FileRequest filerequest = new FileRequest();
			filerequest.setBytes(buffer);
			filerequest.setFileName(name);
			filerequest.setAppName("apiplatform");
			System.out.println("3.赋值前参数filerequest:" + filerequest);
			System.out.println("4.参数filerequestbuffer:" + buffer);
			System.out.println("5.参数BufferSize:" + buffer.length);
			System.out.println("6.参数filerequestFileName:" + name);
			System.out.println("7.已赋值Bytes:"+ filerequest.getBytes());
			System.out.println("8.已赋值FileName:"+ filerequest.getFileName());
			System.out.println("9.已赋值AppName:"+ filerequest.getAppName());
			System.out.println("最终参数filerequest:" + filerequest);
			
			fileBuffer = buffer;
			
			// 是否调用成功
			// 返回的信息,如果成功返回success,如果失败返回错误信息
			// 文件上传成功,会返回一个文件的唯一标识
			// 格式类似于:group1;M00/00/00/CooWNFYJ6kaAWxe_ACrCAeZ2krc847.zip
			// 将这个结果保存到自己的数据库或其他地方,在以后查找文件时用
			if (file.getPath().endsWith(".xlsx")) {
			    System.out.println("文件类型为xlsx");
			} else if (file.getPath().endsWith(".doc")) {
			    System.out.println("文件类型为doc");
			} else if (file.getPath().endsWith(".pdf")) {
                            System.out.println("文件类型为pdf");
			} else if (file.getPath().endsWith(".txt")) {
			    System.out.println("文件类型为txt");
			} else if (file.getPath().endsWith(".pptx")) {
			    System.out.println("文件类型为pptx");
			} else if (file.getPath().endsWith(".docx")) {
			    System.out.println("文件类型为docx");
			} else {
			    request.setAttribute("Error", "文件格式不正确");
			    System.out.println("文件格式不正确");
			}
			file.delete();
		    }
		}

	    } catch (FileUploadException e) {
		e.printStackTrace();
	    } catch (Exception e) {
		// 处理文件写入时的异常
		e.printStackTrace();
	    }
	}
	return "closedLoopInfo";
    }
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197058.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle Number 自动转Decimal问题修正「建议收藏」

    Oracle Number 自动转Decimal问题修正「建议收藏」spark加载Oracle表的Number字段,直接写入关系表会被转成decimal双精度类型解决方式:1.构建Jdbc会话publicclassJdbcOracleDialectextendsJdbcDialect{@OverridepublicbooleancanHandle(Stringurl){returnurl.startsWith(“jdbc:oracle”);}@Overrid…

    2022年7月24日
    29
  • php漏洞 乌云,GitHub – grt1st/wooyun_search: 乌云公开漏洞、知识库搜索 search from wooyun.org…

    php漏洞 乌云,GitHub – grt1st/wooyun_search: 乌云公开漏洞、知识库搜索 search from wooyun.org…wooyun_search乌云公开漏洞、知识库搜索0x00.介绍灵感来源于hanc00l的github项目wooyun_publicwooyun_public基于flask或者tornado,而本项目可以布置在apache、nginx等web服务器上。如果你有wooyun的静态网页数据,那么我们可以开始了!整个项目包括两个部分,第一部分是索引,将网页信息存储进数据库;第二部分是搜索,从数据库中查找…

    2025年6月8日
    0
  • 子组件传对象给父组件_react子组件改变父组件的状态

    子组件传对象给父组件_react子组件改变父组件的状态子组件传值给父组件首先子组件(组件名“Child”)内定义一个方法例如sendData=()=>{letdata=‘1234’;this.props.getData(data);//这个this,props.xxx后面的xxx是是在父组件那使用的名字;},然后可以在render函数后使用这个方法或者另外定义一个事件去触发该方法进行传值,之后可在父组件(Parent)内使用这个方法获取拿到的值:Parent组件内:首先定义一个方法getData或者其他什么都可以随

    2022年9月5日
    2
  • CPU测试_性能测试cpu温度多少范围正常

    CPU测试_性能测试cpu温度多少范围正常目录一系统性能测试指标1.1响应时间1.2并发1.3点击量/点击率1.4吞吐量/吞吐率1.5TPS/QPS1.6PV/UV二Linux服务器性能指标2.1CPU使用率2.2内存占用率2.3系统平均负载2.4磁盘IO2.5linux常用性能命令2.5.1CPU2.5.2内存2.5.3负载2.5.4磁盘2.5.5整体性能测试指标是衡量系统性能的评价标准,常用的系统性能测试指标包括:响应时间…

    2022年10月22日
    0
  • spring aop 切入问题

    spring aop 切入问题spring aop 切入问题

    2022年4月20日
    34
  • HttpSession概述

    HttpSession概述什么是HttpSessionJavax.servlet.http.HttpSession接口表示一个会话,一个会话只能对应一个用户。我们可以把会话需要的共享数据保存到HttpSession中 获取HttpSession对象HttpSessionrequest.getSession():如果当前会话已经有了session对象,直接返回;如果没有则创建session并返回Htt…

    2022年7月12日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号