หลังจากอัปโหลดรูปภาพไปยังเซิร์ฟเวอร์ ftp แล้ว จะไม่สามารถเปิดได้ - รูปแบบมีการเปลี่ยนแปลง [ซ้ำกัน]

ฉันมีปัญหากับแอปพลิเคชัน Spring Boot เมื่อฉันอัปโหลดไฟล์ไปยังเซิร์ฟเวอร์ ftp ไฟล์จะเปลี่ยนรูปแบบไปในทางใดทางหนึ่ง ฉันไม่สามารถเปิดภาพได้อีกต่อไป

ฉันอัปโหลดผ่าน thymeleaf
ในคอนโทรลเลอร์ ฉันใช้บริการอัปโหลด`ด้วยวิธีด้านล่าง:

    public void fileUpload(MultipartFile file) {
        try {
            FtpClient ftp = new FtpClient(ftpHost, ftpPort, ftpUser, ftpPassword);
            ftp.open();
            String tmpdir = System.getProperty("java.io.tmpdir");
            File physicalFile = new File(tmpdir+file.getOriginalFilename());
            file.transferTo(physicalFile);
            ftp.putFileToPath(physicalFile, file.getOriginalFilename());
            ftp.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
}

และนี่คือวิธี FtpClient ของฉัน:

public void open() throws IOException {
    ftp = new FTPClient();

    ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));

    ftp.connect(server, port);
    int reply = ftp.getReplyCode();
    if (!FTPReply.isPositiveCompletion(reply)) {
        ftp.disconnect();
        throw new IOException("Exception in connecting to FTP Server");
    }

    ftp.login(user, password);
}

public void close() throws IOException {
    ftp.disconnect();
}

public void putFileToPath(File file, String path) throws IOException {
    ftp.storeFile(path, new FileInputStream(file));
}

ทุกอย่างใช้งานได้ ไฟล์ปรากฏบนเซิร์ฟเวอร์ และมีน้ำหนักเท่ากัน
... แต่ฉันไม่สามารถเปิดมันได้
โปรแกรมกราฟิกใดๆ ที่ฉันพยายามใช้เปิดก็บอกว่าเป็นรูปแบบไฟล์ที่ไม่ถูกต้อง ...

ป้อนคำอธิบายรูปภาพที่นี่

มีความคิดอะไรบ้าง?


person Mateusz Niedbal    schedule 06.10.2020    source แหล่งที่มา
comment
ไฟล์มีน้ำหนักตั้งแต่เมื่อไหร่?   -  person Luuk    schedule 06.10.2020
comment
เนื่องจากนิวตันค้นพบแรงโน้มถ่วง   -  person Mateusz Niedbal    schedule 06.10.2020
comment
คุณแน่ใจหรือว่าทั้งสองไฟล์ (ในเครื่องและระยะไกล) มีขนาดเท่ากัน (เป็นไบต์!) หากไม่ โปรดดูสิ่งนี้เกี่ยวกับ setFileTypd stackoverflow.com/questions/44194256/   -  person Luuk    schedule 06.10.2020
comment
จริงๆแล้วฉันได้ตรวจสอบแล้วและความแตกต่างก็ประมาณ 1 ไบต์   -  person Mateusz Niedbal    schedule 06.10.2020
comment
ด้วย filetype คุณสามารถเปลี่ยนจากการโอน ASCII เป็น BINARY คุณต้องถ่ายโอนไฟล์นี้แบบไบนารี่เพื่อให้มีขนาดเท่าเดิม (ไม่รู้ว่าน้ำหนักเปลี่ยนไปหรือเปล่า ????)   -  person Luuk    schedule 06.10.2020
comment
น้ำหนักของคอมพิวเตอร์ไม่แน่นอน :)   -  person Mateusz Niedbal    schedule 06.10.2020
comment
ฉันได้เพิ่ม {ftp.setFileType(FTP.BINARY_FILE_TYPE);} แล้ว แต่ไม่มีอะไรเปลี่ยนแปลง ไฟล์ jpg บางไฟล์ไม่สามารถอ่านได้ บางไฟล์ถูกทำลายครึ่งหนึ่ง ไฟล์ pdf ก็ถูกทำลายเช่นกัน (ข้อความ เส้น ฯลฯ หายไป)   -  person Mateusz Niedbal    schedule 06.10.2020
comment
ผ่าน ftp.login (ผู้ใช้, รหัสผ่าน); เส้น   -  person Mateusz Niedbal    schedule 06.10.2020
comment
ใช่ !!! ขอบคุณ มันใช้งานได้แล้ว!!! ผ่านไปคือเมื่อก่อน และควรจะเป็นหลัง :) ขอบคุณมาก   -  person Mateusz Niedbal    schedule 06.10.2020


คำตอบ (1)


ในคลาส FtpClient ของฉัน - ฉันได้เพิ่มหนึ่งบรรทัด
ในวิธีการ void open():

public void open() throws IOException {
    ftp = new FTPClient();

    ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
    ftp.connect(server, port);
    int reply = ftp.getReplyCode();
    if (!FTPReply.isPositiveCompletion(reply)) {
        ftp.disconnect();
        throw new IOException("Exception in connecting to FTP Server");
    }

    ftp.login(user, password);

    //      IT WAS THE PROBLEM - I didn't have it:
    ftp.setFileType(FTP.BINARY_FILE_TYPE);

}

ขอบคุณที่ช่วยเหลือ

person Mateusz Niedbal    schedule 06.10.2020