2011-04-06 49 views
1

简而言之,由于GAE无法写入文件系统,因此我决定将数据保存到数据存储中(使用JDO)。现在,我希望逐字节地检索数据并将其作为输入流传递给客户端。 gwtupload库(http://code.google.com/p/gwtupload/)中有代码(见下文),它在GAE上中断,因为它写入系统文件系统。我希望能够提供一个GAE移植解决方案。如何从appengine数据存储中逐字节读取实体对象

public static void copyFromInputStreamToOutputStream(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[100000]; 
    while (true) { 
     synchronized (buffer) { 
     int amountRead = in.read(buffer); 
     if (amountRead == -1) { 
      break; 
     } 
     out.write(buffer, 0, amountRead); 
     } 
    } 
    in.close(); 
    out.flush(); 
    out.close(); 
    } 

一个解决我已经试过(没有工作)是检索数据存储中的数据作为一个像这样的资源:

InputStream resourceAsStream = null; 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    try { 
     Query q = pm.newQuery(ImageFile.class); 
     lf = q.execute(); 
     resourceAsStream = getServletContext().getResourceAsStream((String) pm.getObjectById(lf)); 
    } finally { 
     pm.close(); 
    } 
    if (lf != null) { 
     response.setContentType(receivedContentTypes.get(fieldName)); 
     copyFromInputStreamToOutputStream(resourceAsStream, response.getOutputStream()); 

    } 

我欢迎您的建议。

问候

+0

您是否试图序列化客户端/服务器之间的POJO? – 2011-04-07 02:58:17

+0

不!我基本上试图将文件上传到GAE,使用GWT作为客户端。在进行上传时,我想逐字节地监视它,如进度条或%读数。 – drecute 2011-04-10 17:37:24

回答

0

存储数据在一个字节数组,并使用一个或ByteArrayInputStreamByteArrayOutputStream它传递给该期望流库。

如果通过'客户端'表示'HTTP客户端'或浏览器,但是没有理由这么做 - 只需处理您的端点上的常规字节数组并将它们发送到用户/从用户发送,就像其他任何数据一样。弄乱这样的流的唯一原因是如果你有一些期望它们的库。

相关问题