2

目標は、大きなファイル (ビデオ) をアップロードし、それらの公開共有 URL を取得することです。

それは非常に簡単なように見えますが、ドキュメントを読むのに 1 日以上を費やしましたが、そのサンプルは見つかりませんでした。

次のコードを取得して、正常に動作する Google ストアにアップロードしますが、URL にオプションを追加して、ファイルの ACL を作成したいと思います:「public-read」。jsp でアップロードする前、またはサーブレットでアップロードした後。

<%@ 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>

次に、サーブレットのどこかでリダイレクト 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 Cloud Storage の公開共有 URL を取得したいと考えています。(タイムアウトする可能性があるため、サーブレットを介してファイルを提供できません)

4

1 に答える 1

1

デフォルトでは、createUploadUrl を使用して bigstore にアップロードされたファイルはプライベートです。ACL を公開するには、自分で ACL を変更する必要があります。

また、blob を公開するのではなくそのようにしたい場合は、serve() を使用して、タイムアウトを気にせずにサーブレットから Google Storage から無制限のサイズの blob を返すことができます。

于 2012-10-25T01:21:01.463 に答える