내가 Google 클라우드 스토리지에 저장된 파일에서 바이트를 읽고 HTTP POST 요청에 보내하려고하지만 난 큰 파일, 이 예외를 이동java.lang.OutOfMemoryError와 : Java 힙 공간 - blobstoreService
URLConnection connection = new URL("http://myurl.com/").openConnection();
//set time out to infinite
connection.setConnectTimeout(0);
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
BufferedOutputStream writer = null;
OutputStream output = connection.getOutputStream();
writer = new BufferedOutputStream(output); // true = autoFlush, important!
//........
BlobInfoFactory blobInfoFactory = new BlobInfoFactory();
BlobInfo blobInfo = blobInfoFactory.loadBlobInfo(new BlobKey(video.getBlobkey()));
Long blobSize = blobInfo.getSize();
//max read on fetch
long maxReadFetch = 1015807;
//read the file in one time temporary
long i = 0;
long start = 0;
long end = 0;
while(i < blobSize) {
start = i;
end = i + maxReadFetch;
//determine end
if(end > blobSize) {
end = blobSize;
} else {
end--;
}
writer.write(blobstoreService.fetchData(new BlobKey(video.getBlobkey()), start, end));
i += maxReadFetch;
}
writer.flush(); // Important! Output cannot be closed. Close of writer will close output as well.
} finally {
if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
}
: writer.write(blobstoreService.fetchData(new BlobKey(video.getBlobkey()), start, end));
이 내 코드입니다 : 예외가이 선에 throwed됩니다
: 코드는 작은 파일와 협력
스택 트레이스 : 한 번에 1MB 미만을 읽는 경우에도
Uncaught exception from servlet java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2961) at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:111) at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection$BufferingOutputStream.write(URLFetchServiceStreamHandler.java:460) at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122) at java.io.FilterOutputStream.write(FilterOutputStream.java:97) at controller.CtrlWistia.upload(CtrlWistia.java:200) at controller.CtrlWistia.add(CtrlWistia.java:126) at controller.CtrlWistia.ajax(CtrlWistia.java:79) at controller.CtrlAjax.main(CtrlAjax.java:66) at vidaao.AjaxServlet.doPost(AjaxServlet.java:37) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
확인 아 ...이 전에 데이터를 전송하는 모든 솔루션을해야합니까? –
해당 공급자에 따라 다릅니다. S3에 대한 대답은 다음과 같습니다. http://stackoverflow.com/questions/8495167/how-to-upload-file-to-s3-from-gae-a-horror-story –
오케이 아니요. 내 공급자가 이것을 받아들이지 않을 것입니다. .. 그렇게 나쁘게 나는 완전히 다른 접근법을 시도해야한다. 도와 줘서 고마워. –