java文件上传(如图片)到以二进制的方式存入Oracle或mysql数据库,还可从数据库取出展示,来个demo

如题所述

第1个回答  推荐于2017-12-16
@RequestMapping("/upload")
public String add(@RequestParam("file") CommonsMultipartFile[] files,HttpServletRequest request){

for(int i = 0;i<files.length;i++){
System.out.println("fileName---------->" + files[i].getOriginalFilename());

if(!files[i].isEmpty()){
int pre = (int) System.currentTimeMillis();
try {
//拿到输出流,同时重命名上传的文件
FileOutputStream os = new FileOutputStream("F:/demo/" + new Date().getTime() + files[i].getOriginalFilename());
//拿到上传文件的输入流
FileInputStream in = (FileInputStream)files[i].getInputStream();
//以写字节的方式写文件
int b = 0;
while((b=in.read()) != -1){
os.write(b);
}
os.flush();
os.close();
in.close();
int finaltime = (int) System.currentTimeMillis();
System.out.println(finaltime - pre);

} catch (Exception e) {
e.printStackTrace();
System.out.println("上传出错");
}
}
}
return "/success";
}
@RequestMapping("/upload2" )
public String upload2(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException {
//创建一个通用的多部分解析器
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//判断 request 是否有文件上传,即多部分请求
if(multipartResolver.isMultipart(request)){
//转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
//取得request中的所有文件名
Iterator<String> iter = multiRequest.getFileNames();
while(iter.hasNext()){
//记录上传过程起始时的时间,用来计算上传时间
int pre = (int) System.currentTimeMillis();
//取得上传文件
MultipartFile file = multiRequest.getFile(iter.next());
if(file != null){
//取得当前上传文件的文件名称
String myFileName = file.getOriginalFilename();
//如果名称不为“”,说明该文件存在,否则说明该文件不存在
if(myFileName.trim() !=""){
System.out.println(myFileName);
//重命名上传后的文件名
String fileName = "demoUpload" + new Date().getTime()+file.getOriginalFilename();
//定义上传路径
String path = "F:/demo/" + fileName;
File localFile = new File(path);
file.transferTo(localFile);
}
}
//记录上传该文件后的时间
int finaltime = (int) System.currentTimeMillis();
System.out.println(finaltime - pre);
}

}
return "/success";
}
jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="js/front/jquery-2.1.1.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
i = 1;
j = 1;
$(document).ready(function(){

$("#btn_add1").click(function(){
document.getElementById("newUpload1").innerHTML+='<div id="div_'+i+'"><input name="file" type="file" /><input type="button" value="删除" onclick="del_1('+i+')"/></div>';
i = i + 1;
});

$("#btn_add2").click(function(){
document.getElementById("newUpload2").innerHTML+='<div id="div_'+j+'"><input name="file_'+j+'" type="file" /><input type="button" value="删除" onclick="del_2('+j+')"/></div>';
j = j + 1;
});
});

function del_1(o){
document.getElementById("newUpload1").removeChild(document.getElementById("div_"+o));
}

function del_2(o){
document.getElementById("newUpload2").removeChild(document.getElementById("div_"+o));
}

</script>
</head>
<body>

<h1>springMVC字节流输入上传文件</h1>
<form name="userForm1" action="upload" enctype="multipart/form-data" method="post">
<div id="newUpload1">
<input type="file" name="file">
</div>

<input type="button" id="btn_add1" value="增加一行" >
<input type="submit" value="上传" >
</form>
<br>
<br>
<hr align="left" width="60%" color="#FF0000" size="3">
<br>
<br>
<h1>springMVC包装类上传文件</h1>
<form name="userForm2" action="upload2" enctype="multipart/form-data" method="post"">
<div id="newUpload2">
<input type="file" name="file">
</div>
<input type="button" id="btn_add2" value="增加一行" >
<input type="submit" value="上传" >

</form>
</body>
</html>追问

这个只是个文件上传,并没有存入数据库

追答

这里是上传到服务骑,你只要把图片路径存入数据库就行了,看照片查询路径写上去就行了

本回答被网友采纳
第2个回答  2016-10-12
目前存2进制的很少了 如果 图片 浏览频繁 建议 整个图片服务器追问

那存入数据库的是URL吗

追答

对是的 或是key

asp如何将图片以二进制方式存如数据库。非form方式
可以试试用ADODB.Stream这个组件,这是ADO默认安装的,大多数ASP空间都支持的一个组件.该组件支持二进制文件的读写操作,可以试试.Set aso = CreateObject("ADODB.Stream")aso.Mode = 3 aso.Type = 1 aso.Open aso.LoadFromFile("文件的本地路径")bstr = aso.Read(-1)aso.Close Set aso = Nothi...

java中 如何将存放在数据库中的pdf、doc、jpg等文件读出来(二进制形式...
在数据库中存放这些个二进制文件的字段是BLOB,oracle和MysqL里面都是 java中读取 BLOB数据:首先做查询,拿到查询结果ResultSet rs = XXXX (和普通数据查询一样)然后:Blob blob = rs.getBlob("字段名"); 拿到你的Blob ,得到文件的二进制流:InputStream binaryStream= blob.getBinaryStream();,...

如何在VB中将图片存入数据库,并且从数据库读出显示到界面上
name段,photo段(设置为ole对象)Dim Constr As String 'ODBC路径 Dim Filename As String '图片文件名 Const BLOCKSIZE = 4096 '每次读写块的大小 Dim ADOCon As New ADODB.Connection 'ADODB Connection对象 Dim ADORst As New ADODB.Recordset 'ADODB Recordset对象 Dim ADOFld As ADODB.Field ...

数据库能存图片吗?
解决方法一般有两种:一种是将图片保存的路径存储到数据库;另一种是将图片以二进制数据流的形式直接写入数据库字段中。以下为具体方法: 一、保存图片的上传路径到数据库: string uppath=;用于保存图片上传路径 获取上传图片的文件名 string fileFullname = this.FileUpload1.FileName; 获取图片上传的时间,以...

java实现大量数据导入功能?
Java中怎么实现txt文件批量数据导入到Oracle中,在txt中有一定的格式,解析出来导入到Oracle。1.读取文本文件,每次读取一行,用BufferedReader 2.因为每一行中都是固定的格式,因此解析每一行中的数据。3.将解析的数据保存到数据库。BufferedReaderbr=newBufferedReader(newFileReader(newFile("aa.txt")));...

课程开发的三个阶段
1、数据库知识,范式,MySQL配置,命令,建库建表,数据的增删改查,mongodb数据库。深入理解数据库管理系统通用知识及MySQL数据库的使用与管理,为Node.js后台开发打下坚实基础。 2、模块系统,函数,路由,全局对象,文件系统,请求处理,Web模块,Express框架,MySQL数据库处理,RestfulAPI,文件上传等。熟练运用Node.js运行环境和...

oracle和mysql之间数据直接传输,请问,到底是使用什么样的技术
Oracle与MySQL之间数据进行传输。分为以下几种情况:如果要求是实时的,Oracle可以通过dblink技术直接远程控制MySQL数据库。但是MySQL数据库想要直接远程控制Oracle我也研究了很长时间,也问了教数据库的相关教授,得出的答案是,目前还没有纯粹的数据库技术可以实现。(有一个但十分麻烦,我把思路放到这里:你...

什么是数据交换?有几种交换方法?
数据库迁移是指将数据从一个数据库系统转移到另一个数据库系统的过程。这可以是不同数据库平台之间的迁移,如从Oracle到MySQL,或者是在同一平台内迁移数据库实例。数据库迁移通常在系统升级、更改部署环境或整合多个数据库资源时使用。2. API调用 API(应用程序接口)调用是数据交换的常见方式,通过调用...

mysql数据类型中blob和binary的区别?
在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。根据Eric Raymond的说法,处理BLOB的主要思想就是让文件处理器(如数据库管理器)不去理会文件是什么,而是关心如何...

Java怎样读取数据库中的二进制图片并下载到本地磁盘
System.out.println("数据库连结错误");return ;} try{ test.conn.setAutoCommit(false);byte a[] = null; \/\/**将测试文件test.doc读入此字节数组 java.io.FileInputStream fin = null;java.io.FileOutputStream fout = null;\/\/Oracle提供的 try { java.io.File f1 =...

相似回答