/** * creates a new file in a webdav server using the current domain * * @param path The path relative to the domain for the new file * @param inputStream The contents of the new file in local storage or null if the new file is * empty * @param overwrite If there is an existing file, it will be overwritten if this parameter is set * to true * @return The complete path of the file created or null if not created */ public String createFile(String newPath, InputStream inputStream, boolean overwrite) throws IOException { String result = null; try { int len = 0; int readLength = 0; byte[] inBytes = new byte[DEFAULT_BUFFER_SIZE]; BufferedInputStream in = new BufferedInputStream(inputStream); if (_isLocal) { Util.createHigherLevelFolders(_rootFile.getCanonicalPath(), newPath); File tmpFile = new File(_rootFile.getCanonicalPath() + File.separatorChar + newPath); if (!overwrite && tmpFile.exists()) throw new IOException("File already exist: " + tmpFile.getAbsolutePath()); FileOutputStream out = new FileOutputStream(tmpFile); len = in.read(inBytes); while (len != -1) // Check for EOF { out.write(inBytes, 0, len); len = in.read(inBytes); } out.close(); result = tmpFile.getCanonicalPath(); } else { len = in.read(inBytes); while (len != -1) // Check for EOF { readLength += len; if (readLength == len) { // Write first block of the file inBytes = shortenByteArray(inBytes, len); result = _remote.createFile(_domain, newPath, inBytes, overwrite); if (result == null) throw new IOException("Error creating the file: " + newPath); } else { // Continue writing remaining blocks of the file boolean last = (len < DEFAULT_BUFFER_SIZE); if (last) inBytes = shortenByteArray(inBytes, len); int writeLength = (int) writeToFile(newPath, inBytes, last); if (writeLength != readLength) { throw new Exception("Write length does not match Read Length"); } } len = in.read(inBytes); } } } catch (IOException ioe) { throw ioe; } catch (Exception ex) { System.out.println("[FileAccess.createFile] Error uploading file"); ex.printStackTrace(); } return result; }
/** * creates a new file in a webdav server using the current domain * * @param path The path relative to the domain for the new file * @param file The contents of the new file in local storage or null if the new file is empty * @param overwrite If there is an existing file, it will be overwritten if this parameter is set * to true * @return The complete path of the file created or null if not created */ public String createFile(String newPath, File file, boolean overwrite) throws IOException { String result = null; try { byte[] inBytes = null; if (file.length() < DEFAULT_BUFFER_SIZE) inBytes = new byte[(int) file.length()]; else inBytes = new byte[DEFAULT_BUFFER_SIZE]; int len = 0; BufferedInputStream in = new BufferedInputStream(new FileInputStream(file)); if (_isLocal) { Util.createHigherLevelFolders(_rootFile.getCanonicalPath(), newPath); File tmpFile = new File(_rootFile.getCanonicalPath() + File.separatorChar + newPath); if (!overwrite && tmpFile.exists()) throw new IOException("File already exist: " + tmpFile.getAbsolutePath()); FileOutputStream out = new FileOutputStream(tmpFile); long readLength = 0; while (readLength < file.length()) { len = in.read(inBytes); out.write(inBytes, 0, len); readLength += len; } out.close(); result = tmpFile.getCanonicalPath(); } else { long readLength = in.read(inBytes); result = _remote.createFile(_domain, newPath, inBytes, overwrite); if (result == null) throw new IOException("Error creating the file: " + newPath); while (readLength < file.length()) { len = in.read(inBytes); readLength += len; boolean last = (readLength >= file.length()); if (last) { // 040702 DDJ: Modified to shorten byte array inBytes = shortenByteArray(inBytes, len); } if (writeToFile(newPath, inBytes, last) != readLength) { throw new Exception(); } } } in.close(); } catch (IOException ioe) { throw ioe; } catch (Exception ex) { ex.printStackTrace(); } return result; }