package org.csource.fastdfs; import java.io.IOException; import java.io.OutputStream; import java.io.InputStream; import org.csource.fastdfs.UploadCallback; /** * Upload file by stream * @author zhouzezhong & Happy Fish / YuQing * @version Version 1.11 */ public class UploadStream implements UploadCallback { private InputStream inputStream; //input stream for reading private long fileSize = 0; //size of the uploaded file /** * constructor * @param inputStream input stream for uploading * @param fileSize size of uploaded file */ public UploadStream(InputStream inputStream, long fileSize) { super(); this.inputStream = inputStream; this.fileSize = fileSize; } /** * send file content callback function, be called only once when the file uploaded * @param out output stream for writing file content * @return 0 success, return none zero(errno) if fail */ public int send(OutputStream out) throws IOException { long remainBytes = fileSize; byte[] buff = new byte[256 * 1024]; int bytes; while(remainBytes > 0) { try { if ((bytes=inputStream.read(buff, 0, remainBytes > buff.length ? buff.length : (int)remainBytes)) < 0) { return -1; } } catch(IOException ex) { ex.printStackTrace(); return -1; } out.write(buff, 0, bytes); remainBytes -= bytes; } return 0; } }