Oracle数据库存储某张图片的相对路径,在服务端这边怎么引用,并返回给客户端。

Oracle数据库存储某张图片的相对路径,在服务端这边怎么引用,并返回给客户端。,第1张

直接返回前端页面一个url路径,你服务端所要做的工作就是获得服务器的IP地址以及数据库中存的相对路径,拼接好返回给前端页面。拼接前面的地址就是你服务器的IP地址啊,你的存在哪个服务器就写哪个地址,如果是直接存在应用服务器上的,那就是应用服务器的ip,这种服务器地址应该是配置好的,或许是配置文件、或许是配置表。 这个是你应该提前知道的,直接就拿过来用的。
至于你最后说的把直接存在数据库,建议你不要试。每个IT人员都在刚开始的时候被深深的教育过,不要这样做,数据库会爆炸,当然我也没这么做过,所以后果也只是听人说。
返回给用户一个>你这是网页往服务器发送内容时候带参数是吧 你可以在网页点击提交到Servlet时候携带参数(具体是:(<你提交的网页url>action=query),然后再Servlet端接受参数就可以了,最后把参数传到你要显示的页面,记住,在你显示的页面也要接收参数才能够正确显示)

一、转码失败
在数据写入到表的过程中转码失败,数据库端也没有进行恰当的处理,导致存放在表里的数据乱码。
针对这种情况,前几篇文章介绍过客户端发送请求到服务端。
其中任意一个编码不一致,都会导致表里的数据存入不正确的编码而产生乱码。
比如下面简单一条语句:
set @a = "文本字符串";
insert into t1 values(@a);
1 变量 @a 的字符编码是由参数 CHARACTER_SET_CLIENT 决定的,假设此时编码为 A,也就是变量 @a 的编码。
2 写入语句在发送到 MySQL 服务端之前的编码由 CHARACTER_SET_CONNECTION 决定,假设此时编码为 B。
3 经过 MySQL 一系列词法,语法解析等处理后,写入到表 t1,表 t1 的编码为 C。
那这里编码 A、编码 B、编码 C 如果不兼容,写入的数据就直接乱码。
二、客户端乱码
表数据正常,但是客户端展示后出现乱码。
这一类场景,指的是从 MySQL 表里拿数据出来返回到客户端,MySQL 里的数据本身没有问题。客户端发送请求到 MySQL,表的编码为 D,从 MySQL 拿到记录结果传输到客户端,此时记录编码为 E(CHARACTER_SET_RESULTS)。
那以上编码 E 和 D 如果不兼容,检索出来的数据就看起来乱码了。但是由于数据本身没有被破坏,所以换个兼容的编码就可以获取正确的结果。
这一类又分为以下三个不同的小类:
1)字段编码和表一致,客户端是不同的编码
比如下面例子, 表数据的编码是 utf8mb4,而 SESSION 1 发起的连接编码为 gbk。那由于编码不兼容,检索出来的数据肯定为乱码。
2)表编码和客户端的编码一致,但是记录之间编码存在不一致的情形
比如表编码是 utf8mb4,应用端编码也是 utf8mb4,但是表里的数据可能一半编码是 utf8mb4,另外一半是 gbk。那么此时表的数据也是正常的,不过此时采用哪种编码都读不到所有完整的数据。这样数据产生的原因很多,比如其中一种可能性就是表编码多次变更而且每次变更不彻底导致(变更不彻底,我之前的篇章里有介绍)。举个例子,表 t3 的编码之前是 utf8mb4,现在是 gbk,而且两次编码期间都被写入了正常的数据。
3)每个字段的编码不一致,导致乱码
和第二点一样的场景。不同的是:非记录间的编码不统一,而是每个字段编码不统一。举个例子,表 c1 字段 a1,a2。a1 编码 gbk,a2 编码是 utf8mb4。那每个字段单独读出来数据是完整的,但是所有字段一起读出来,数据总会有一部分乱码。
三、LATIN1
还有一种情形就是以 LATIN1 的编码存储数据
估计大家都知道字符集 LATIN1,LATIN1 对所有字符都是单字节流处理,遇到不能处理的字节流,保持原样,那么在以上两种存入和检索的过程中都能保证数据一致,所以 MySQL 长期以来默认的编码都是 LATIN1。这种情形,看起来也没啥不对的点,数据也没乱码,那为什么还有选用其他的编码呢?原因就是对字符存储的字节数不一样,比如 emoji 字符 "❤",如果用 utf8mb4 存储,占用 3 个字节,那 varchar(12) 就能存放 12 个字符,但是换成 LATIN1,只能存 4 个字符。

import javaioBufferedReader;  
import javaioFile;  
import javaioFileNotFoundException;  
import javaioFileOutputStream;  
import javaioIOException;  
import javaioInputStream;  
import javaioInputStreamReader;  
import javanetServerSocket;  
import javanetSocket;  
  
  

   
  文件名:ServerReceivejava 
  实现功能:作为服务器接收客户端发送的文件 
   
  具体实现过程: 
  1、建立SocketServer,等待客户端的连接 
  2、当有客户端连接的时候,按照双方的约定,这时要读取一行数据 
       其中保存客户端要发送的文件名和文件大小信息 
  3、根据文件名在本地创建文件,并建立好流通信 
  4、循环接收数据包,将数据包写入文件 
  5、当接收数据的长度等于提前文件发过来的文件长度,即表示文件接收完毕,关闭文件 
  6、文件接收工作结束 
   
   
  注:此代码仅为演示客户端与服务器传送文件使用, 
       每一个数据包之前没有文件协议命令 
       具体的协议传输和文件传出的使用阶段可根据自己程序自行放置 
   
   
  作者:小菜鸟 
  创建时间:2014-08-19 
   
  /  
  
  
  
  
public class ServerReceive {  
  
    public static void main(String[] args) {  
          
        /与服务器建立连接的通信句柄/  
        ServerSocket ss = null;  
        Socket s = null;  
          
        /定义用于在接收后在本地创建的文件对象和文件输出流对象/  
        File file = null;  
        FileOutputStream fos = null;  
          
        /定义输入流,使用socket的inputStream对数据包进行输入/  
        InputStream is = null;  
          
        /定义byte数组来作为数据包的存储数据包/  
        byte[] buffer = new byte[4096  5];  
          
        /用来接收文件发送请求的字符串/  
        String comm = null;  
          
          
        /建立socekt通信,等待服务器进行连接/  
        try {  
            ss = new ServerSocket(4004);  
            s = ssaccept();  
        } catch (IOException e) {  
            eprintStackTrace();  
        }  
          
          
        /读取一行客户端发送过来的约定信息/  
        try {  
            InputStreamReader isr = new InputStreamReader(sgetInputStream());  
            BufferedReader br = new BufferedReader(isr);  
            comm = brreadLine();  
        } catch (IOException e) {  
            Systemoutprintln("服务器与客户端断开连接");  
        }  
          
        /开始解析客户端发送过来的请求命令/  
        int index = commindexOf("/#");  
          
        /判断协议是否为发送文件的协议/  
        String xieyi = commsubstring(0, index);  
        if(!xieyiequals("111")){  
            Systemoutprintln("服务器收到的协议码不正确");  
            return;  
        }  
          
        /解析出文件的名字和大小/  
        comm = commsubstring(index + 2);  
        index = commindexOf("/#");  
        String filename = commsubstring(0, index)trim();  
        String filesize = commsubstring(index + 2)trim();  
          
          
        /创建空文件,用来进行接收文件/  
        file = new File(filename);  
        if(!fileexists()){  
            try {  
                filecreateNewFile();  
            } catch (IOException e) {  
                Systemoutprintln("服务器端创建文件失败");  
            }  
        }else{  
            /在此也可以询问是否覆盖/  
            Systemoutprintln("本路径已存在相同文件,进行覆盖");  
        }  
          
        /以上就是客户端代码中写到的服务器的准备部分/  
          
          
        / 
          服务器接收文件的关键代码/  
        try {  
            /将文件包装到文件输出流对象中/  
            fos = new FileOutputStream(file);  
            long file_size = LongparseLong(filesize);  
            is = sgetInputStream();  
            /size为每次接收数据包的长度/  
            int size = 0;  
            /count用来记录已接收到文件的长度/  
            long count = 0;  
              
            /使用while循环接收数据包/  
            while(count < file_size){  
                /从输入流中读取一个数据包/  
                size = isread(buffer);  
                  
                /将刚刚读取的数据包写到本地文件中去/  
                foswrite(buffer, 0, size);  
                fosflush();  
                  
                /将已接收到文件的长度+size/  
                count += size;  
                Systemoutprintln("服务器端接收到数据包,大小为" + size);  
            }  
              
        } catch (FileNotFoundException e) {  
            Systemoutprintln("服务器写文件失败");  
        } catch (IOException e) {  
            Systemoutprintln("服务器:客户端断开连接");  
        }finally{  
            / 
              将打开的文件关闭 
              如有需要,也可以在此关闭socket连接 
              /  
            try {  
                if(fos != null)  
                    fosclose();  
            } catch (IOException e) {  
                eprintStackTrace();  
            }//catch (IOException e)  
        }//finally  
  
    }//public static void main(String[] args)  
}//public class ServerReceive


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13375998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-24
下一篇 2023-07-24

发表评论

登录后才能评论

评论列表(0条)

保存