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

◇◆丶佛笑我妖孽 提交于 2019-12-20 05:54:22

问题


I have two projects; one for my server and one for my client, I am able to send images to the server with ease. But I am wondering how would you be able to download that image you just sent to the server back to the client when I press the download button I have created on my client GUI? My code is written in java.

Many Thanks

This is my serverhandler

    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);} 

                }

    }

And this is my client

   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); 
            }
        } 

//**********************reading image*********************************//

       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(); 

          } 
} 

But when run nothing occurs? i have linked the client method to run when a button is clicked.


回答1:


I would do something like this:

//Server Handler

 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);} 

            }

//Receiving image

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(); 

      } 
} 



回答2:


Assuming that you would have to provide file name and then press download button. So on server side convert the image into byte stream and write over the connection socket. On client side recieve bytes into buffer and then create FileOutputStream providing the directory for output. Write the recieved bytes onto the file using the outputstream created.



来源:https://stackoverflow.com/questions/34003525/how-do-you-download-the-same-image-you-sent-to-a-server-back-to-the-client

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!