目标是上传大文件(视频)并获取公共共享网址。
看起来很简单,但我花了一天多的时间进入文档,我没有找到任何样本。
我得到以下代码,以便上传到Google商店,但工作正常,但我想在网址中添加选项以生成文件的acl:“public-read”。要么先在jsp中上传,要么在servlet之后上传。
<%@ page import="com.google.appengine.api.blobstore.BlobstoreServiceFactory" %>
<%@ page import="com.google.appengine.api.blobstore.BlobstoreService" %>
<%@ page import="com.google.appengine.api.blobstore.UploadOptions" %>
<%
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
String uploadUrl = blobstoreService.createUploadUrl("/ajax?act=user&act2=video_upload", UploadOptions.Builder.withGoogleStorageBucketName("vidaao"));
%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Upload Page</title>
</head>
<body>
<h1>Upload v3</h1>
<form name="form1" id="form1" action="<% out.print(uploadUrl); %>" method="post" enctype="multipart/form-data" target="upload_iframe">
<input type="hidden" name="hiddenfield1" value="ok">
Files to upload:
<br/>
<input type="file" name="myFile">
<br/>
<button type="submit">Send</button>
</form>
<iframe id="upload_iframe" name="upload_iframe"></iframe>
</body>
</html>
然后在我的servlet中,重定向url以生成的blobkey
结束public String upload(HttpServletRequest req, HttpServletResponse res) throws Exception{
Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
BlobKey blobKey = blobs.get("myFile");
if (blobKey == null) {
throw new Exception("Error file not uploaded");
}
//TODO: HERE get the public shared url of the file
return " blob key = " + blobKey.getKeyString();
}
如果可能,我希望在此步骤中获得Google云端存储的公共共享网址。 (我无法通过servlet提供文件,因为它可能会超时)
答案 0 :(得分:1)
默认情况下,使用createUploadUrl上传到bigstore的文件是私有的。您需要自己修改ACL以使其公开。
此外,您可以使用serve()从您的servlet返回无限大小的Blob,而不用担心超时,如果您希望以这种方式执行此操作而不是将Blob公开。