#java #spring #spring-boot #hibernate #file-io
#java #spring #spring-boot #спящий режим #file-io
Вопрос:
public void storeEmployeeImageDetails(String folderPath, List<Employee> listEmp) {
try {
for (Employee emp : listEmp) {
Blob image;
String imageType;
image = emp.getImageBlob();
imageType = emp.getImageType();
String empId = emp.getEmployeeID();
if (!"".equals(imageType) amp;amp; image != null) {
String type = imageType.substring(1);
int blobLength = (int) image.length();
byte[] blobAsBytes = image.getBytes(1, blobLength);
BufferedImage imageData = ImageIO.read(new ByteArrayInputStream(blobAsBytes));
ImageIO.write(imageData, type, new File(folderPath empId imageType));
}
}
} catch (SQLException | IOException e) {
e.printStackTrace();
logger.error("Exception Occured While Storing Employee Image In Server Folder: " e);
}
}
Я получаю ошибку:
исключение java.io.FileNotFoundException: https:example.comhruploadsprofilepics100.jpg (Неверен синтаксис имени файла, каталога или метки тома)
ПРИМЕЧАНИЕ: Здесь путь к папке — это https:\example.com\hr\uploads\profilepics\
то, что я получаю из файла application.properties.
https:\example.com
это сервер godaddy, и это PHP-проект. Я пытаюсь сохранить изображения из приложения Java на этот сервер.
Комментарии:
1. Из предоставленного вами небольшого объяснения похоже, что вы хотите сохранить файл где-нибудь в файловой системе на другом сервере. Это не должно быть возможно с использованием http, поскольку, если бы это было так, это было бы дырой в безопасности. Поэтому, даже если вы сможете управлять этим, вам не следует полагаться на это. Взгляните на API этого сервера и на то, что он предоставляет (он может принимать некоторый путь в качестве параметра запроса / публикации).
2. этот URL-адрес не является rest API. Это папка на их сервере. с разрешением на запись.
3. Речь идет не о разрешениях, а о сети.
4. Ну, это не имеет никакого отношения к REST. Если вы хотите использовать HTTP, сервер должен предоставить обработчик конечной точки / http, который мог бы переводить произвольные URL-адреса в локальные пути. Однако ImageIO не сможет этого сделать — вам нужно использовать URL-соединение (в идеале использовать HttpClient, например, как предусмотрено Apache Commons Http) и опубликовать изображение на этот URL.
5. Спасибо за идею, я попробую это.
Ответ №1:
public class FTPUploader {
FTPClient ftp = null;
public FTPUploader(String host, String user, String pwd) throws Exception{
ftp = new FTPClient();
ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
int reply;
ftp.connect(host);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
throw new Exception("Exception in connecting to FTP Server");
}
ftp.login(user, pwd);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
}
public void uploadFile(byte[] localFileFullName, String fileName, String hostDir)
throws Exception {
try {
InputStream input = new ByteArrayInputStream(localFileFullName);
this.ftp.storeFile(hostDir fileName, input);
}catch(Exception e) {
e.printStackTrace();
}
}
public void disconnect(){
if (this.ftp.isConnected()) {
try {
this.ftp.logout();
this.ftp.disconnect();
} catch (IOException f) {
// do nothing as file is already saved to server
}
}
}
}