在向分布式文件系统(fastdfs)上传图片时,图片损坏。
ClientGlobal.init("fdfs_client.properties");
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageServer storageServer=null;
StorageClient storageClient = new StorageClient(trackerServer,storageServer);
File file = new File("dog.png");
InputStream fileInputStream = new FileInputStream(file);
byte[] content = new byte[fileInputStream.available()];
fileInputStream.read(content);
String[] strings = storageClient.upload_file(content, "png", null);
上面的代码将文件类型直接写死了,而在实际环境中我们需要根据图片的头文件来确定文件类型。
而我使用了同一个InputStream
对象读取文件的头文件,然后在读取内容做为上传的内容。
由于InputStream
不可重复读,第二次读取时是从第一次读取的尾部开始读,而不是从最开始的位置读取内容,导致图片虽然上传成功了,但图片却损坏了无法查看。
解决方法:
使用一个单独的输入流读取头文件,使用另一个输入流读取待上传的数据