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";
    }
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一文理解class.getClassLoader().getResourceAsStream(file)和class.getResourceAsStream(file)区别

    一文理解class.getClassLoader().getResourceAsStream(file)和class.getResourceAsStream(file)区别基础理解都是实现获取在classpath路径下的资源文件的输入流。为什么是classpath而不是src,因为当web项目运行时,IDE编译器会把src下的一些资源文件移至WEB-INF/classes,classPath目录其实就是这个classes目录。这个目录下放的一般是web项目运行时的class文件、资源文件(xml,properties…);另外,在使用spring…

  • jieba库分词代码_怎么下载jieba库

    jieba库分词代码_怎么下载jieba库jieba库概述(jieba是优秀的中文分词第三分库)中文文本需要通过分词获得单个的词语jieba是优秀的中文分词第三方库,需要额外安装jieba库提供三种分词模式,最简单只需要掌握一个函数jieba库的安装(cmd命令行)pipinstalljieba(导入)importjieba(查看版本)jieba.__version__jieba分词的原理(jieba分词依靠…

  • HttpClient 3.1 文件上传

    HttpClient 3.1 文件上传

  • pycharm如何统一改变量名_pycharm批量修改变量名

    pycharm如何统一改变量名_pycharm批量修改变量名在使用文字工具写小说的时候,如果你想改变主人公的姓名,可以通过快捷方式一键全改,而不用逐个更改。那么在用pycharm编辑代码的时候,该如何将代码中的变量名称进行一键更改呢?按快捷键Ctrl+r,弹出以下页面,在这个页面中我标出了两个红框。左边红框中有两个输入栏,上面的是你的原变量名,下面是你要改为的新变量名;将原变量名和新变量名输入之后,去右边的边框中选择局部替换还是全部替换即可。…

  • linux修改密码永久有效[通俗易懂]

    linux修改密码永久有效[通俗易懂]password-X99999用户名称passwd用户名称

  • lnk2019无法解析的外部符号_declspec_无法解析的外部符号lnk2001

    lnk2019无法解析的外部符号_declspec_无法解析的外部符号lnk2001VisualStudio2015编译中出现此问题:errorLNK2019:无法解析的外部符号__vsnprintf,该符号在函数xxxx中被引用解决方案:1、可能是由于某些头文件的函数或者未连接某些链接库所引起,故将头文件和链接库包含进去就OK。2、在项目工程属性中将MFC的使用变为“在共享DLL中使用MFC”3、编译时加入以下代码#include&amp;amp;amp;lt;Windows.h…

发表回复

您的电子邮箱地址不会被公开。

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