private static char[] toHexCharArray(int b) { final char[] dst = new char[2]; formatHexChar(dst, 0, b); return dst; }
/** {@inheritDoc} */ @Override public void onAllDataRead() throws IOException { close(); }
/** {@inheritDoc} */ @Override public Response.Action getDownloadAction(AnyLongObjectId id) { return getAction(id); }
/** * {@inheritDoc} * * Handle object downloads */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse rsp) throws ServletException, IOException { AnyLongObjectId obj = getObjectToTransfer(req, rsp); if (obj != null) { if (repository.getSize(obj) == -1) { sendError(rsp, HttpStatus.SC_NOT_FOUND, MessageFormat .format(LfsServerText.get().objectNotFound, obj.getName())); return; } AsyncContext context = req.startAsync(); context.setTimeout(timeout); rsp.getOutputStream() .setWriteListener(new ObjectDownloadListener(repository, context, rsp, obj)); } }
/** * {@inheritDoc} * * Handle object uploads */ @Override protected void doPut(HttpServletRequest req, HttpServletResponse rsp) throws ServletException, IOException { AnyLongObjectId id = getObjectToTransfer(req, rsp); if (id != null) { AsyncContext context = req.startAsync(); context.setTimeout(timeout); req.getInputStream().setReadListener(new ObjectUploadListener( repository, context, req, rsp, id)); } }
ReadableByteChannel getReadChannel(AnyLongObjectId id) throws IOException { return FileChannel.open(getPath(id), StandardOpenOption.READ); }
AtomicObjectOutputStream getOutputStream(AnyLongObjectId id) throws IOException { Path path = getPath(id); Path parent = path.getParent(); if (parent != null) { Files.createDirectories(parent); } return new AtomicObjectOutputStream(path, id); }
/** * Get the path where the given object is stored * * @param id * id of a large object * @return path the object's storage path */ protected Path getPath(AnyLongObjectId id) { StringBuilder s = new StringBuilder( Constants.LONG_OBJECT_ID_STRING_LENGTH + 6); s.append(toHexCharArray(id.getFirstByte())).append('/'); s.append(toHexCharArray(id.getSecondByte())).append('/'); s.append(id.name()); return dir.resolve(s.toString()); }
static void sendError(HttpServletResponse rsp, int status, String message) throws IOException { rsp.setStatus(status); PrintWriter writer = rsp.getWriter(); gson.toJson(new Error(message), writer); writer.flush(); writer.close(); rsp.flushBuffer(); }
@Override public void close() throws IOException { out.close(); if (!aborted) { verifyHash(); locked.commit(); } }
/** * Handle object uploads * * @param req * servlet request * @param rsp * servlet response * @throws ServletException * if a servlet-specific error occurs * @throws IOException * if an I/O error occurs */ @Override protected void doPut(HttpServletRequest req, HttpServletResponse rsp) throws ServletException, IOException { AnyLongObjectId id = getObjectToTransfer(req, rsp); if (id != null) { AsyncContext context = req.startAsync(); context.setTimeout(timeout); req.getInputStream().setReadListener(new ObjectUploadListener( repository, context, req, rsp, id)); } }
ReadableByteChannel getReadChannel(AnyLongObjectId id) throws IOException { return FileChannel.open(getPath(id), StandardOpenOption.READ); }
/** {@inheritDoc} */ @Override public Action getUploadAction(AnyLongObjectId id, long size) { return getAction(id); }
private static char[] toHexCharArray(int b) { final char[] dst = new char[2]; formatHexChar(dst, 0, b); return dst; }
/** * @throws IOException */ @Override public void onAllDataRead() throws IOException { close(); }
/** {@inheritDoc} */ @Override public long getSize(AnyLongObjectId id) throws IOException { Path p = getPath(id); if (Files.exists(p)) { return Files.size(p); } else { return -1; } }
@Override public Response.Action getDownloadAction(AnyLongObjectId id) { return getAction(id); }
@Override public long getSize(AnyLongObjectId id) throws IOException { Path p = getPath(id); if (Files.exists(p)) { return Files.size(p); } else { return -1; } }
@Override public Action getUploadAction(AnyLongObjectId id, long size) { return getAction(id); }
AtomicObjectOutputStream getOutputStream(AnyLongObjectId id) throws IOException { Path path = getPath(id); Path parent = path.getParent(); if (parent != null) { Files.createDirectories(parent); } return new AtomicObjectOutputStream(path, id); }