/* * This file is part of anycook. The new internet cookbook * Copyright (C) 2014 Jan Graßegger * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see [http://www.gnu.org/licenses/]. */ package de.anycook.upload; import de.anycook.db.mysql.DBUpload; import org.apache.commons.lang3.RandomStringUtils; import java.io.*; import java.net.URL; import java.net.URLConnection; import java.sql.SQLException; public class UserUploader extends UploadHandler { public UserUploader() { super(50, 200, 240, "user/"); } @Override protected String makeAndCheckFilename() throws SQLException { boolean uniqueFileName; try (DBUpload dbupload = new DBUpload()) { String filename; do { filename = RandomStringUtils.randomAlphanumeric(20); uniqueFileName = dbupload.checkUserFilename(filename); } while (!uniqueFileName); return filename; } } public String saveFBURLImage(String fbpath) throws SQLException, IOException { String largePath = fbpath + "?type=large"; String filename = makeAndCheckFilename() + ".png"; byte[] smallData = getURLData(new URL(fbpath)); byte[] largeData = getURLData(new URL(largePath)); imageSaver.save("small/", filename, smallData); imageSaver.save("big/", filename, largeData); return filename; } private byte[] getURLData(URL url) { try { URLConnection c = url.openConnection(); InputStream in = new BufferedInputStream(c.getInputStream()); int contentLength = c.getContentLength(); byte[] data = new byte[contentLength]; int bytesRead = 0; int offset = 0; while (offset < contentLength) { bytesRead = in.read(data, offset, data.length - offset); if (bytesRead == -1) break; offset += bytesRead; } in.close(); return data; } catch (IOException e) { logger.error("failed to save FBImage", e); } return new byte[0]; } }