Java 如何在谷歌应用程序引擎上编写文件?

Java 如何在谷歌应用程序引擎上编写文件?,java,google-app-engine,google-cloud-datastore,blobstore,Java,Google App Engine,Google Cloud Datastore,Blobstore,我想通过程序下载并保存谷歌应用程序引擎上的图像文件。我可以看到有一个数据存储API,所以我可以保存任何对象 Entity e = new Entity("Kind"); e.setProperty("heigh",6); DatastoreServiceFactory.getDatastoreService().put(e); 但是我需要将下载的图像(字节[])保存到某个地方,在那里我可以在HTML上下文中引用,比如src=static/image1.png。这听起来就像是Blobstore

我想通过程序下载并保存谷歌应用程序引擎上的图像文件。我可以看到有一个数据存储API,所以我可以保存任何对象

Entity e = new Entity("Kind");
e.setProperty("heigh",6);
DatastoreServiceFactory.getDatastoreService().put(e);
但是我需要将下载的图像(字节[])保存到某个地方,在那里我可以在HTML上下文中引用,比如
src=static/image1.png
。这听起来就像是Blobstore

我发现了很多上传的例子,但我不想要上传表单。所以我试着编译一篇文章,就像在文件中一样,但我没有工作。Google App Engine是否有更简单的文件保存解决方案(免费,所以云存储不是一个选项)

免费解决方案:

  • 如果映像小于1MB,则可以将字节存储到数据存储中
  • 您可以始终使用API的第三方免费图像托管解决方案
付费解决方案:

另外,谷歌建议你改用谷歌云存储

因为直接写入blobstore是不推荐的

我找到了同样的“解决方案”:(感谢您的回复!
URL surl = new URL("http://www.freeonlinegames.com/games/39779/medium.jpg");
byte[] byteArray = URLFetchServiceFactory.getURLFetchService().fetch(surl).getContent();
StringBuilder parameters = new StringBuilder();

parameters.append("--BOUNDARY");
parameters.append("\nContent-Disposition: form-data; name=\"file\"; filename\"test.png\"\n");
parameters.append("Content-Type: image/jpg\n\n");

parameters.append(new String(byteArray));
parameters.append("\n--BOUNDARY\n");

String request = BlobstoreServiceFactory.getBlobstoreService().createUploadUrl("/upload");


URL durl = new URL(request);
log("upload: " + durl.toString());

HttpURLConnection connection = (HttpURLConnection) durl.openConnection();           
connection.setDoOutput(true);
connection.setDoInput(true);

connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=--BOUNDARY");
connection.setRequestProperty("Content-Length",Integer.toString(parameters.toString().getBytes().length));
connection.setRequestProperty("Cache-Control","max-age=0");
                    connection.setRequestProperty("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
connection.setRequestProperty("Accept-Encoding","gzip,deflate,sdch");                   

DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());

wr.writeBytes(parameters.toString());

wr.flush();
wr.close();

BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());
byte[] bkey = new byte[512];
bis.read(bkey);
log("resp: " + new String(bkey));