title: How to upload file to google cloud storage using java?
body: <p>I use org.apache.commons.fileupload to upload file<br/>
  class StorageService is a service that use cloud storage APIs to store file
  This is my code</p>
  
  <pre><code>public class UploadFileAction extends org.apache.struts.action.Action {
  
  private static final String SUCCESS = "success";
  private StorageService storage = new StorageService();
  private static final int BUFFER_SIZE = 1024 * 1024;
  
  @Override
  public ActionForward execute(ActionMapping mapping, ActionForm form,
          HttpServletRequest request, HttpServletResponse response)
          throws Exception {
  
      ServletFileUpload upload = new ServletFileUpload();
      FileItemIterator iter = upload.getItemIterator(request);
      while (iter.hasNext()) {
          FileItemStream item = iter.next();
          String fileName = item.getName();
          String mime = item.getContentType();
          storage.init(fileName, mime);
          InputStream is = item.openStream();
  
          byte[] b = new byte[BUFFER_SIZE];
          int readBytes = is.read(b, 0, BUFFER_SIZE);
          while (readBytes != -1) {
              storage.storeFile(b, BUFFER_SIZE);
              readBytes = is.read(b, 0, readBytes);
          }
  
          is.close();
          storage.destroy();
      }
  
      return mapping.findForward(SUCCESS);
  }
  }
  
  package storageservice;
  
  import com.google.appengine.api.files.*;
  import com.google.appengine.api.files.GSFileOptions.GSFileOptionsBuilder;
  import java.io.*;
  import java.nio.channels.Channels;
  
  public class StorageService {
  
  private static final String BUCKET_NAME = "thoitbk";
  
  private FileWriteChannel writeChannel = null;
  private OutputStream os = null;
  
  public void init(String fileName, String mime) throws Exception {
      FileService fileService = FileServiceFactory.getFileService();
      GSFileOptionsBuilder builder = new GSFileOptionsBuilder()
              .setAcl("public_read")
              .setBucket(BUCKET_NAME)
              .setKey(fileName)
              .setMimeType(mime);
      AppEngineFile writableFile = fileService.createNewGSFile(builder.build());
      boolean lock = true;
      writeChannel = fileService.openWriteChannel(writableFile, lock);
      os = Channels.newOutputStream(writeChannel);
  }
  
  public void storeFile(byte[] b, int readSize) throws Exception {
      os.write(b, 0, readSize);
      os.flush();
  }
  
  public void destroy() throws Exception {
      os.close();
      writeChannel.closeFinally();
  }
  }
  </code></pre>
  
  <p>In local this works fine but error when I deploy my app<br/>
  Please help me!</p>