package com.groupdocs.demo.annotation; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.servlet.http.Part; import org.apache.commons.io.IOUtils; import com.groupdocs.sdk.api.StorageApi; import com.groupdocs.sdk.common.ApiInvoker; import com.groupdocs.sdk.common.GroupDocsRequestSigner; import com.groupdocs.sdk.model.UploadResponse; @WebServlet("/upload") @MultipartConfig public class UploadServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); String guid = (String) session.getAttribute("fileGuid"); String clientId = (String) session.getAttribute("clientId"); String privateKey = (String) session.getAttribute("privateKey"); log("session params: clientId=" + clientId + ", privateKey: " + privateKey + ", guid=" + guid); String fileName = null; File file = null; try { for (Part part : request.getParts()) { String name = part.getName(); if (name != null) { if (name.equals("client_id")) { clientId = getValue(part); } else if (name.equals("private_key")) { privateKey = getValue(part); } else if (name.equals("file")) { try { // Upload File InputStream is = request.getPart(part.getName()).getInputStream(); fileName = getFileName(part); if (fileName == null) { fileName = "uploaded"; } file = File.createTempFile(fileName, String.valueOf(System.currentTimeMillis())); FileOutputStream out = new FileOutputStream(file); IOUtils.copy(is, out); out.close(); log("Saved uploaded file at " + file.getAbsolutePath()); } catch (Exception e) { e.printStackTrace(); } } } } if(file == null){ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Failed to receive file. Try again."); return; } log("params received: clientId=" + clientId + ", privateKey: " + privateKey + ", file_name=" + fileName); ApiInvoker.getInstance().setRequestSigner(new GroupDocsRequestSigner(privateKey)); UploadResponse gdResponse = new StorageApi().Upload(clientId, fileName, "", new FileInputStream(file)); String fileGuid = gdResponse.getResult().getGuid(); session.setAttribute("fileGuid", fileGuid); session.setAttribute("clientId", clientId); session.setAttribute("privateKey", privateKey); } catch (Exception e) { e.printStackTrace(); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Failed to upload file to GroupDocs. Try again."); return; } log("forwarding request to " + request.getContextPath() + "view.jsp"); request.getRequestDispatcher(request.getContextPath() + "view.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } // Get the Value of the Form field other than type form field type file private String getValue(Part part) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader( part.getInputStream(), "UTF-8")); StringBuilder value = new StringBuilder(); char[] buffer = new char[1024]; for (int length = 0; (length = reader.read(buffer)) > 0;) { value.append(buffer, 0, length); } return value.toString(); } private String getFileName(Part part) { String partHeader = part.getHeader("content-disposition"); log("Part Header = " + partHeader); for (String cd : part.getHeader("content-disposition").split(";")) { if (cd.trim().startsWith("filename")) { return cd.substring(cd.indexOf('=') + 1).trim() .replace("\"", ""); } } return null; } }