2016-12-13 4 views
1

Я искал лучший способ сохранить файл в базе данных MySQL, так как у меня есть Java-программа, которая должна сохранять и извлекать несколько изображений. Я сначала подумал о создании таблицы с BLOB и с помощью этого кода я нашел:Сохранить изображение на удаленном сервере

File image = new File("C:/image.jpg"); 
PrepareStatement psmnt = connection.prepareStatement 
("insert into save_image(image) "+ "values(?)"); 

FileInputStream fis = new FileInputStream(image); 
psmnt.setBinaryStream(3, (InputStream)fis, (int)(image.length())); 
/* executeUpdate() method execute specified sql query. Here this query 
insert data and image */ 
int s = psmnt.executeUpdate(); 

Однако, я читал, что с помощью базы данных MySQL для изображений, которые были сериализовать не рекомендуется для повышения производительности. Мне сказали, что лучше сохранить указатели на каталоги на сервере. Как загрузить и загрузить файл на удаленный сервер? или вы вместо этого рекомендуем использовать базу данных MySQL?

+0

Лучше использовать AWS S3 для хранения изображений и сохранить URL этого изображения в базе данных MySQL. – Sivailango

+1

Никогда не храните изображение в базе данных, просто сохраните изображение в файловой системе и сохраните путь к изображению (для последующего извлечения). –

ответ

2

Вы можете перенести изображение на свой сервер с помощью сокетов. Это будет связь клиент/сервер, поэтому вам потребуется отправитель и программа-получатель.

Client (Sender)

public static void sendFileToServer() throws Exception { 
     Path path = Paths.get("path/to/file"); 
     byte[] data = Files.readAllBytes(path); 

     // port has to be the same on client and server side 
     int port = 1337; 

     //create a socket connection to the server 
     Socket socket = new Socket("ipAdressOfTheServer", port); 
     OutputStream out = socket.getOutputStream(); 

     // first write the length of the file so the receiver knows how much it has to read 
     out.write(ByteBuffer.allocate(4).putInt(data.length).array()); 
     //write the actual file data 
     out.write(data, 0, data.length); 
     socket.close(); 
    } 

Сервер (приемник)

public static void receiveFile() throws Exception { 
     //create a ServerSocket to listen for incoming connections 
     ServerSocket server = new ServerSocket(1337); 
     Socket senderSocket = server.accept(); 
     DataInputStream in = new DataInputStream(senderSocket.getInputStream()); 
     //first read the length of the file 
     int lengthOfFile = in.readInt(); 
     byte[] buffer = new byte[lengthOfFile]; 

     //then read the actual file bytes 
     in.readFully(buffer); 

     FileOutputStream fos = new FileOutputStream("pathname"); 
     fos.write(buffer); 
     fos.close(); 
    }