如何将发送到服务器的相同图像下载回客户端?

How do you download the same image you sent to a server back to the client?

我有两个项目;一个用于我的服务器,一个用于我的客户端,我可以轻松地将图像发送到服务器。但是我想知道当我按下我在客户端 GUI 上创建的下载按钮时,您如何能够将刚刚发送到服务器的图像下载回客户端?我的代码写在java.

非常感谢

这是我的服务器处理程序

    String fileName;
        fileName = "RecievedImageoutreach1.jpg";
        DataOutputStream dout = new DataOutputStream(sock.getOutputStream());

//Coding for image transfer 
        int flag=0,i; 
        String extn=""; 
            for(i=0; i<fileName.length(); i++) 
            { 
                if(fileName.charAt(i)=='.' || flag==1) 
                { 
                flag=1; 
                extn += fileName.charAt(i); 
                } 
            }   

            if(extn.equals(".jpg") || extn.equals(".gif")) 
                {
                try{ 

                    File file = new File(fileName); 
                    FileInputStream fin = new FileInputStream(file);    
                    dout.writeUTF(fileName);  
                    byte[] readData = new byte[1024]; 

                    while((i = fin.read(readData)) != -1) 
                            { 
                            dout.write(readData, 0, i); 
                            }  
                            //ta.appendText("\nImage Has Been Sent"); 

                            dout.flush();
                            fin.close(); 
                    }catch(IOException ex)
                      {System.out.println("Image ::"+ex);} 

                }

    }

这是我的客户

   public void download() throws IOException {
    // Get input from the server 

    DataInputStream dis = new DataInputStream (sock.getInputStream()); 
    String str,extn = ""; 
    str = dis.readUTF(); 

    int flag=0,i; 

        for(i=0;i<str.length();i++) 
        { 

            if(str.charAt(i)=='.' || flag==1) 
            { 
            flag=1; 
            extn+=str.charAt(i); 
            }
        } 

//************************读图****************** **************//

       if(extn.equals(".jpg") || extn.equals(".gif")) 
          {             
            File file = new File("Downloaded"+str); 
            FileOutputStream fout = new FileOutputStream(file);

            //receive and save image from client 
            byte[] readData = new byte[1024]; 
            while((i = dis.read(readData)) != -1) 
            {
                fout.write(readData, 0, i); 
                if(flag==1) 
                { 
                ta.append("Image Has Been Downloaded"); 
                flag=0; 
                } 
            } 
        fout.flush(); 
        fout.close(); 

          } 
} 

但是当运行什么都没有发生?单击按钮时,我已将客户端方法链接到 运行。

假设您必须提供文件名,然后按下载按钮。所以在服务器端将图像转换为字节流并写入连接套接字。在客户端将字节接收到缓冲区中,然后创建 FileOutputStream 提供输出目录。使用创建的输出流将接收到的字节写入文件。

我会这样做:

//服务器处理程序

 File file = new File(fileName); 
 FileInputStream fin = new FileInputStream(file);    
// dout.writeUTF(fileName); 
   byte[] readData = new byte[1024]; 
   fin.read(readData);  
   fin.close();
   dout.write(readData, 0, readData.length); 
   dout.flush();

  /* while((i = fin.read(readData)) != -1) 
   { 
       dout.write(readData, 0, i); 
   }*/  
                        //ta.appendText("\nImage Has Been Sent"); 

                        dout.flush();
                        fin.close(); 
                }catch(IOException ex)
                  {System.out.println("Image ::"+ex);} 

            }

//接收图像

if(extn.equals(".jpg") || extn.equals(".gif")) 
      {   
        //give path to new file
        File file = new File(".//Downloaded"+str); 
        FileOutputStream fout = new FileOutputStream(file);

        //receive and save image from client 
        byte[] readData = new byte[1024]; 
        int offset =0; 
        while((i = dis.read(readData,0,readData.length-offset)) != -1){
              offset += i;
        }

            fout.write(readData, 0, readData.length); 
            if(flag==1) 
            { 
            ta.append("Image Has Been Downloaded"); 
            flag=0; 
            }  

    fout.flush(); 
    fout.close(); 

      } 
}