0

我已经在 Google App Engine 中部署了一个应用程序,并且我想使用桌面上的 java 代码和用于下载请求的服务器代码从服务器上传和下载数据,还有一个:我在哪里将数据存储在应用程序引擎中?

4

2 回答 2

1

要存储二进制数据(文件内容),您有三个选项:

  1. 数据存储区实体的 Blob 属性
  2. Blobstore
  3. 谷歌云存储
于 2012-04-26T13:24:20.037 回答
0

您可以将文件保存在服务器上的任何位置,您只需要知道路径即可。

我如何将它作为输出流?

这是一个可以帮助您的代码片段。

File fileOnServer = new File("Hello.txt"); // Give full path where your file is located

byte[] file = new byte[(int) fileOnServer.length()];

FileInputStream fileInputStream = new FileInputStream(fileOnServer);
fileInputStream.read(file);

int contentLength = (int) file.length;
response.setContentLength(contentLength);
response.setHeader("Content-Disposition", "attachment; filename=\"Hello.txt\"");
out = response.getOutputStream();


int bytesWritten = 0;
byte[] buffer = new byte[1024];
while (bytesWritten < contentLength) {
    int bytes = Math.min(1024, contentLength - bytesWritten);
    System.arraycopy(file, bytesWritten, buffer, 0, bytes);
    if (bytes > 0) {
        out.write(buffer, 0, bytes);
        bytesWritten += bytes;
    } else if (bytes < 0);
}

下载到用户端?

好吧,您可以在客户端的 Button 上添加 ClickHandler 并覆盖onClick方法。

public void onClick(ClickEvent event) {
        Window.open("UrlToYourServelet", "_blank", "null");
}

希望这可以帮助!

编辑

我找到了解决方案。您可以像这样在任何免费文件托管网站上传文件。该站点为每个上传的文件提供一个 URL。因此,在您的 serverlet 中,向 URL 发出 HTTP 请求,然后下载文件byte[]并将其写入 outputStream,如上面的代码所示。

于 2012-04-27T06:47:23.260 回答