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

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


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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 八、装饰者模式—巴厘岛,奶茶店的困扰! #和设计模式一起旅行#[通俗易懂]

    善于思考,方法总比问题多!故事背景我和漂亮的模式MM来到巴厘岛,这里火山爆发刚刚结束不久,一切要重新开始,来到这个地方几天后,觉得这个地方还是不错,于是就决定在这里开一个奶茶店,因为这里游客比较多,流量大,反正之前我们也没有开店的体验,那么一拍即合,开个奶茶店,体验一下了。 奶茶店的名字:Beautiful Life milk tea!名字起好了,那么我们就开始想如…

    2022年2月27日
  • yuicompressor java_YUI Compressor[通俗易懂]

    yuicompressor java_YUI Compressor[通俗易懂]简介根据雅虎卓越性能团队的说法,40%到60%的雅虎用户拥有空闲缓存体验,所有页面浏览量中约有20%是使用空缓存完成的(请参阅TenniTheurer在YUIBlog上的这篇文章)有关浏览器缓存使用的更多信息)。这一事实概述了保持网页尽可能轻量化的重要性。改进页面或Web应用程序的工程设计通常会带来最大的节省,而且应始终是主要策略。通过正确的设计,有许多提高性能的辅助策略,例如缩小代码,HTTP…

    2022年7月18日
  • 检查网站有没有被挂马_安全网址检测

    检查网站有没有被挂马_安全网址检测介绍很多网站都被挂过马,挂马即在获取服务器的部分权限或所有权限后,向网页文件中插入一段恶意代码,即挂马。这些恶意代码可以是浏览器漏洞的利用代码,也可以是赚取流量的代码,或者是盗取账号的代码。URLSnooperurlsnooper字面理解即url窥探,官方说明是可以帮助用户发现音频和视频文件的url地址。下载地址是http://www.donationcoder.com/softw…

    2022年9月30日
  • fastjson的JSONArray和JSONObject[通俗易懂]

    fastjson的JSONArray和JSONObject[通俗易懂]什么是JSON?JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于javascriptProgrammingLanguage,StandardECMA-2623rdEdition-December1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言

    2022年6月7日
  • onedrive个人版免费扩容_onedrive会员

    onedrive个人版免费扩容_onedrive会员这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

    2022年9月3日
  • dos下拷贝服务器文件命令行,win7在DOS环境下怎么使用copy命令?使用copy命令复制文件的方法…[通俗易懂]

    dos下拷贝服务器文件命令行,win7在DOS环境下怎么使用copy命令?使用copy命令复制文件的方法…[通俗易懂]win7系统在DOS环境下,如果想复制文件,该怎么操作呢?正常复制粘贴用不了,我们可以使用copy这条命令。copy命令复制文件占用系统资源会更少,复制速度也会略快。那么DOS环境下怎么使用copy命令?我们一起阅读下文教程吧。1、在DOS环境下,如果想复制一个文件副本,并且不对文件名进行更改,则可输入如下命令:copy源文件新文件位置比如说,我想将当前目录下的1.txt文件复制到…

    2022年7月18日

发表回复

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

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