Mercurial > hg > monetdb-java
view src/main/java/org/monetdb/jdbc/MonetFileTransfer.java @ 503:7e3987c16cde onclient
Succesful file uploading
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Wed, 18 Aug 2021 15:02:59 +0200 (2021-08-18) |
parents | |
children |
line wrap: on
line source
package org.monetdb.jdbc; import java.io.BufferedReader; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; public abstract class MonetFileTransfer { public void handleUpload(MonetUploadHandle handle, String name, boolean textMode, int offset) throws IOException { throw new UnsupportedOperationException("This client is not prepared to handle uploads"); } public static class UploadFromDirectory extends MonetFileTransfer { private final Path root; private final boolean utf8Encoded; public UploadFromDirectory(Path dir, boolean utf8Encoded) { root = dir.toAbsolutePath().normalize(); this.utf8Encoded = utf8Encoded; } public UploadFromDirectory(String dir, boolean utf8Encoded) { this(FileSystems.getDefault().getPath(dir), utf8Encoded); } @Override public void handleUpload(MonetUploadHandle handle, String name, boolean textMode, int offset) throws IOException { Path path = root.resolve(name).normalize(); if (!path.startsWith(root)) { handle.sendError("File is not in upload directory"); return; } if (!Files.isReadable(path)) { handle.sendError("Cannot read " + name); return; } if (textMode && (offset > 1 || !utf8Encoded)) { Charset encoding = utf8Encoded ? StandardCharsets.UTF_8 : Charset.defaultCharset(); BufferedReader reader = Files.newBufferedReader(path, encoding); int toSkip = offset > 1 ? offset - 1 : 0; for (int i = 0; i < toSkip; i++) { reader.readLine(); } handle.uploadFrom(reader); } else { handle.uploadFrom(Files.newInputStream(path)); } } } }