java代码中如何存图论 java图片存储方案

java web项目中有很多的图片,如何存放?一般有两种情况,
一种是前端开发需要显示的图片,这个是页面构成必须的元素 , 一般这些会做 动静分离,后台接口 跟 前端资源会部署在不同的服务器上,有不同的优化,一般会有转发的服务器,判断是后台接口,就转发到后台的服务器,如果是前端资源,就转发到前台的服务器 。一般情况下,前端服务器,跟后台的服务器,是分离开的,有不同的人去管理,如果项目小的话,可能就全放在一个 。这个优化的化,你可以去了解下 CDN原理 。这个是用来优化静态资源加载情况的 。
另一种情况是,显示的图片,不是前端构成的,是用户上传文件产生的,这种情况下 , 现在一般有专门的对象存储,用过 七牛云,跟阿里的 。这个的逻辑是文件上传的时候,不是上传到我们自己的服务器,上传到专门的云服务器,我们自己数据库只需要保存这些上传文件的地址,真正使用的时候,把连接给前端,前端自动会根据内容到专门的云服务器上去获取 。所有的安全,优化,带宽 , 缓存命中,这些都有由云服务器去保证 。简单来说,只有有钱 , 这些东西根本不会成为你项目的瓶颈 。
作为技术,我们讨论的应该不是这些 。图片会做备份,这个可以有专门的磁盘阵列去实现 , 简单来说,就是上传的内容保存到磁盘的时候,会自动多保存几个备份到不同的磁盘上 。还是那句话 , 多去了解下CDN的原理,最后这段,个人理解 , 不一定对 。
关于JAVA~~~~ 如何将图片等大对象存入ORACLE中~~求详解!(代码)插入图片/文本(blob /clob)到oracle数据库(引用)
我们在写OA的时候经常遇到的问题就是员工图片档案的储存问题,解决这个问题有两个方法,
1.JSP/html页面里面读取web服务器上的图片,也就是把图片放到(上传)到web 服务器上,然后用html 语句读?。?
img src="https://www.04ip.com/post/绝对或相对路径" border="0" /
2.就是上传到数据库里面(oracle).关于oracle 数据库,它支持blob, 和clob, 分别对应着图片和文本(长字符串)操作
由于性能原因,我们还是要采用第二种方法,而且存到数据库里面比较容易管理,是吧?
首先,我们要解决上传问题,这里采用普遍使用的apache commons 组件里面的FileUpload class.
具体步骤如:
DiskFileUpload dfu=new DiskFileUpload();
dfu.setSizeMax(100000000);
dfu.setSizeThreshold(100000);
dfu.setRepositoryPath("f:\\public");
try{
List fileItems=dfu.parseRequest(request);
Iterator i=fileItems.iterator();
while(i.hasNext()){
FileItem fi=(FileItem)i.next();
if(!fi.isFormField()){
name=fi.getName();
size=fi.getSize();
if((name==null||name.equals(""))size==0)
continue;
}
name=fi.getName();
size=fi.getSize();
(InputStream)is=fi.getInputStream();
}
上面的代码是web服务器接受上传的代码,参考文件已经在我上篇写的上传文本文件里给出,今天,终于想明白了:
dfu.setRepositoryPath("f:\\public"); 的意思
原来是转义字符也就是说\n\t等而要打印反斜杠要用\\,其实这个问题原先已经知道,可是由于经验没有写过图片上传处理什么的,觉得很高深,也很可怕,哈哈,心里有点畏惧.看来基础的东西,那怕一点点小细节也很重要,接着还有下面的java IO 问题.刚才读core java 的时候突然发现在讲io的时候特意提醒了这个问题,可是我没有注意!
通过上面的代码已经实现文件上传了.然后,我们要实现JDBC数据源链接,目的是要把数据插入到oracle.
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("jdbc/asdbCoreDS");
conn=ds.getConnection();
conn.setAutoCommit(false);
关于要import java.sql.* javax.sql.* java.naming.* 不再详细叙述了
接着根据很有用的一篇文章的提示,插入blob类型一定要先1.插入一个空的
String insert=" insert into uploadpicture "
" values(?, empty_blob()) ";
2.然后找到这个blob的oracle 里面的游标:
String findCursor=" select content "
" from uploadpicture "
" where name=?for update ";
注意这个for update(注意?。。”匦爰觙or update,这将锁定该行 , 直至该行被修改完毕,保证不产生并发冲突 。这里还是难以理解,先记下来吧)
3.然后再修改
String update=" update uploadpicture"
" set content=? "
" where name=? ";
这里的问号是为PreparedStatement参数处理而写的!
写这个程序用到了oracle.sql.BLOB class ,这个类是用来操作BLOB数据类型的
当我们通过ResultSet 对象得到
blob=(BLOB)rs.getBlob(1);
的时候我不知道如何处理了,Blob 是什么?String, int ,long? 我现在也不明白!估计CSDN上的人也不明白,否则我发个帖子半天没有人回答,也许是很烂,也许是太简单了,大家不屑一顾,看来我还要继续追赶!
不发牢骚了,回到程序里(总觉得自己的发散思维很强,看来写程序的时候不能这样,多亏java 是纯面向对象语言,如果是过程就麻烦了)
我们如何处理这个blob 呢?回答是,不管它是什么,直接写入BufferedOutputStream out1 =new BufferedOutputStream(blob.getBinaryOutputStream());
这里是建立了缓冲写如blob 的流(注意getBinaryOutputStream()已经不被赞成使用了,一定有更优秀的方法替代!),说到流,我到现在还有点晕,类很多,不知道究竟用哪个好!
基础的东西非常重要,这曾经是我的口头禅,这里用到了流的读入写和写入,有些流是从文件或其它位置上读取字节(如, FileInputStream),有写流是把字节组合成有用的数据(如, DataInputStream).我们读取数字的时候,需要首先建议一个FileInpuStream, 然后, 再把该类的对象传递给DataInputStream
FileInputStream fin=new FileInputStream(“emp.dat”);
DataInputStream din=new DataInputStream(fin);//把fin传递给din
double s=din.readDouble();
默认情况下,流是没有缓冲的, 如果使用缓冲就是
DataInputStream din=new DataInputStream(
new BufferedInputStream(new FileINputStream(“emp.dat”)));
有了这点理解也很管用,
【java代码中如何存图论 java图片存储方案】BufferedOutputStream out1 =new BufferedOutputStream(blob.getBinaryOutputStream());
就是建立一个缓冲写的对象到blob.注意这里的out1 不是out,否则程序运行的时候不能打印了temp 数据了!
已经准备好如何写了, 可是如何读呢?
BufferedInputStream in=new BufferedInputStream(is);
在我们上传的时候(InputStream)is=fi.getInputStream();
读取图片为输入的流.保存为is 对象,然后就用到这里了,准备好了读和写了,我们开始干活:
int c;
while((c=in.read())!=-1) {out1.write(c);}
in.close();
out1.close();
通过缓冲一个个读数据,然后一个个写数据.-1 为文件的末尾,
最后当读写完成后我们要关闭读写对象!
程序分析就是这样,以后还要对此问题进行研究,最后还要注意,
%@ page contentType="image/jpeg;charset=GBK"%
不是
%@ page contentType="text/html;charset=GBK"%
否则是以文字显示图片---乱码.
这里研究了上传图片到oralce 里面的程序,关于显示还要麻烦一点,借助资料我实现了,明天再研究一下.
//插入上传图片到数据库
%@ page contentType="text/html;charset=GBK"%
%@ page import="java.util.*"%
%@ page import="java.io.*"%
%@ page import="org.apache.commons.*"%
%@ page import="org.apache.commons.fileupload.*"%
%@ page import="java.sql.*"%
%@ page import="javax.sql.*"%
%@ page import="javax.naming.*"%
%@ page import="oracle.sql.*"%
html
head
meta http-equiv="Content-Type" content="text/html; charset=GBK"
titlegetPicture.jsp/title
/head
body
%
request.setCharacterEncoding("GBK");
String name=null;
long size=0;
Connection conn=null;
String insert=" insert into uploadpicture "
" values(?, empty_blob()) ";
String findCursor=" select content "
" from uploadpicture "
" where name=?for update ";
String update=" update uploadpicture"
" set content=? "
" where name=? ";
BLOB blob=null;
InputStream is=null;
DiskFileUpload dfu=new DiskFileUpload();
dfu.setSizeMax(100000000);
dfu.setSizeThreshold(100000);
dfu.setRepositoryPath("f:\\public");
try{
List fileItems=dfu.parseRequest(request);
Iterator i=fileItems.iterator();
while(i.hasNext()){
FileItem fi=(FileItem)i.next();
if(!fi.isFormField()){
name=fi.getName();
size=fi.getSize();
if((name==null||name.equals(""))size==0)
continue;
}
name=fi.getName();
size=fi.getSize();
is=fi.getInputStream();
}
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("jdbc/asdbCoreDS");
conn=ds.getConnection();
conn.setAutoCommit(false);
//step 1
PreparedStatement ps=conn.prepareStatement(insert);
ps.setString(1, name);
int a=ps.executeUpdate();
if(a0)
out.println("insert success!" "br");
//step 2
ps=conn.prepareStatement(findCursor);
ps.setString(1, name);
ResultSet rs=ps.executeQuery();
while(rs.next())
{
blob=(BLOB)rs.getBlob(1);
out.println("find cursor success!" "br");
out.println("cursor:" blob "br");
//step 3
ps=conn.prepareStatement(update);
ps.setBlob(1, blob);
ps.setString(2, name);
ps.executeUpdate();
ps.close();
BufferedOutputStream out1 =new BufferedOutputStream(blob.getBinaryOutputStream());
BufferedInputStream in=new BufferedInputStream(is);
int c;
while((c=in.read())!=-1) {out1.write(c);}
in.close();
out1.close();
out.println("update success!" "br");}
conn.commit();
}
catch(SQLException se)
{se.printStackTrace();}
catch(FileUploadException fue)
{fue.printStackTrace();}
%
/body
/html
//显示数据库里面的图片
%@ page contentType="image/jpeg;charset=GBK"%
%@ page import="java.sql.*"%
%@ page import="javax.sql.*"%
%@ page import="javax.naming.*"%
%@ page import="java.io.*"%
%@ page import="com.sun.image.codec.jpeg.*"%
%@ page import="javax.imageio.*"%
%@ page import="java.util.*"%
%@ page import="java.awt.image.*"%
html
head
meta http-equiv="Content-Type" content="image/jpeg; charset=GBK"
titleshowDBImage.jsp/title
/head
body
%
String showImage=" select * "
" from uploadpicture "
" where name=′TXC with snow.JPG′ " ;
Connection conn=null;
BufferedInputStream inputImage=null;
try{
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("jdbc/asdbCoreDS");
conn=ds.getConnection();
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery(showImage);
while(rs.next())
{
oracle.sql.BLOB blob=(oracle.sql.BLOB)rs.getBlob("content");
inputImage =new BufferedInputStream(blob.getBinaryStream());
/*String name=rs.getString(1);
String content=rs.getString(2);
out.println(name "br");*/}
BufferedImage image=null;
image=ImageIO.read(inputImage);
ServletOutputStream sos=response.getOutputStream();
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(sos);
encoder.encode(image);
inputImage.close();
conn.commit();
}
catch(SQLException se)
{se.printStackTrace();
conn.rollback();}
catch(IOException ie)
{ie.printStackTrace();}
%
/body
/html
求图论算法java实现求图论算法java实现
package test;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Queue;
public class MinSpanningTree {
class Edge {//内部类定义边的数据结果
int u, v, weight;
}
ArrayListedge Edges = new ArrayListedge();
Mapinteger, integer="" nodeFather = new HashMapinteger, integer=""();
int cnt = 0, nodeCnt = 0;
public MinSpanningTree(String path) {
try {
BufferedReader br = new BufferedReader(new FileReader(path));
String str;
String[] strArray;
while ((str = br.readLine()) != null) {
strArray = str.split("\\s");
Edges.add(cnt, new Edge());
Edges.get(cnt).u = Integer.parseInt(strArray[0]);
Edges.get(cnt).v = Integer.parseInt(strArray[1]);
Edges.get(cnt).weight = Integer.parseInt(strArray[2]);
if (!nodeFather.containsKey(Edges.get(cnt).u)) {
nodeFather.put(Edges.get(cnt).u, Edges.get(cnt).u);//初始化 , father[i]=i;
nodeCnt;
}
if (!nodeFather.containsKey(Edges.get(cnt).v)) {
nodeFather.put(Edges.get(cnt).v, Edges.get(cnt).v);
nodeCnt;
}
cnt;
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean union(int u, int v) {//并操作
int a = find(u);
int b = find(v);
if (a != b) {
nodeFather.put(a, b);
return true;
}
return false;
}
public int find(int x) {//查操作
if (x != nodeFather.get(x)) {
nodeFather.put(x, find(nodeFather.get(x)));
}
return nodeFather.get(x);
}
public ArrayListedge getMinSpanningTree() {
ArrayListedge result = new ArrayListedge();
Queueedge FsQueue = new PriorityQueueedge(1000,//设置优先队列,使按边权值从小到大排序
new Comparatoredge() {
public int compare(Edge EdgeOne, Edge EdgeTwo) {
if (EdgeOne.weightEdgeTwo.weight)
return 1;
else if (EdgeOne.weightEdgeTwo.weight)
return -1;
else
return 0;
}
});
for (int i = 0; icnt;i) {
FsQueue.add(Edges.get(i));
}
while (!FsQueue.isEmpty()) {//遍历每一条边
Edge Edge = FsQueue.poll();
if (union(Edge.u, Edge.v)) {
result.add(Edge);
} else {
continue;
}
}
return result;
}
public static void main(String[] args) {
MinSpanningTree mstree = new MinSpanningTree("c:/treedata.txt");
ArrayListedge result = mstree.getMinSpanningTree();
for (int i = 0; iresult.size();i) {
System.out.println(result.get(i).u" "result.get(i).v" "result.get(i).weight);
}
}
}
java中导入一个图片,然后在图片上加上几个文字再输出保存,应该如何用代码实现?import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Test{
public static void main(String[] args){
try {
File f1 = new File("a.jpg");
BufferedImage image = ImageIO.read(f1);
Graphics g = image.getGraphics();
g.setFont(new Font("Serif",Font.BOLD,20));
g.setColor(Color.red);
g.drawString("happy new year!", 10, 20);
File f2 = new File("copy.jpg");
ImageIO.write(image, "JPEG", f2);
} catch (IOException e) {
e.printStackTrace();
}
}
}
java中如何把一个图片转换成二进制流存入到类中?。?/h2>1.将Image图像文件存入到数据库中
我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中.
要这里有关数据的操作略写,我将一些代码段写成方法,方便直接调用.
//根据文件名(完全路径)
public byte[] SetImageToByteArray(string fileName)
{
FileStream fs = new FileStream(fileName, FileMode.Open);
int streamLength = (int)fs.Length;
byte[] image = new byte[streamLength];
fs.Read(image, 0, streamLength);
fs.Close();
return image;
}
//另外,在ASP.NET中通过FileUpload控件得到的图像文件可以通过以下方法
public byte[] SetImageToByteArray(FileUpload FileUpload1)
{
Stream stream = FileUpload1.PostedFile.InputStream;
byte[] photo = new byte[FileUpload1.PostedFile.ContentLength];
stream.Read(photo, 0, FileUpload1.PostedFile.ContentLength);
stream.Close();
return photo;
}
2.从SQL Server数据库读取Image类型的数据,并转换成bytes[]或Image图像文件
//要使用SqlDataReader要加载using System.Data.SqlClient命名空间
//将数据库中的Image类型转换成byte[]
public byte[] SetImage(SqlDataReader reader)
{
return (byte[])reader["Image"];//Image为数据库中存放Image类型字段
}
//将byte[]转换成Image图像类型
//加载以下命名空间using System.Drawing;/using System.IO;
using System.Data.SqlClient;*/
public Image SetByteToImage(byte[] mybyte)
{
Image image;
MemoryStream mymemorystream = new MemoryStream(mybyte,0, mybyte.Length);
image = Image.FromStream(mymemorystream);
return image;
}
在java代码中怎么从服务器上把图片拿来放到数据库里大概流程:
1.上传插件java代码中如何存图论的选择:此篇博文选择的是jQuery的zyupload文件上传插件;
2.上传请求发起后java代码中如何存图论,java代码的处理:你是要将上传的图片只保存在服务器还是只保存在数据库还是说两者都采取 。上传到服务器很简单java代码中如何存图论 , 保存到数据库也很简单java代码中如何存图论,但是此处需要考虑业务,图片保存在数据库时采用哪种保存方式(本博文业务来自于项目,因为图片数量巨多,故在数据库是通过保存图片的路径实现的 , 并非二进制流);
3.图片保存在数据库后,在前段页面的回显功能 。
java代码中如何存图论的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于java图片存储方案、java代码中如何存图论的信息别忘了在本站进行查找喔 。

    推荐阅读