当前位置: 首页 > 知识库问答 >
问题:

允许用户使用BlobstoreService上传并保存文件到我的GCS Bucket,如何识别上传的文件?

巫健柏
2023-03-14

请帮忙。我正在尝试使用BlobstoreService将视频文件(.mp4)上传到GCS bucket。

文件成功上传并自动保存在我的GCS桶中,客户端收到的关键upload_result值是。
问题是,我不知道如何识别上传的文件保存在我的桶中的Blosstore Service和如何获得其他信息例如请求中的foo和bar键值。

文档中说我可以使用BlobInfo#getGsObjectName()来获取名称,但该方法现在似乎不可用
我可以从请求中获得“blobkey”,但我认为它只适用于Blobstore,不适用于GCS
是的,我可以得到原始文件名,但原始文件名在GCS中丢失,只有对象名。

com.google.appengine.api.blobstore.BobInfohttps://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/blobstore/BlobInfo.html#getGsObjectName--

///// JSP ///////
<%!
final String BUCKT_NAME = "my_bucket";
final long MAX_SIZE = 1024 * 1024 * 300;
String uploadURL;

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
UploadOptions uploadOptions = UploadOptions.Builder
                               .withGoogleStorageBucketName(BUCKET_NAME)
                               .maxUploadSizeBytes(MAX_SIZE);
uploadURL = blobstoreService.createUploadUrl("/handler", uploadOptions);
%>


///// HTML Form ///////
<form id="file_upload_form" action="" method="post" enctype="multipart/form-data">
    <input type="file" name="uploaded_file">
    <button type="button">UPLOAD</button>
    <input type="hidden" name="foo" value="bar"> <-- I want to upload additional information with the video file.
</form>


///// ajax ///////

function uploadFile(){
    var fd = new FormData($('#file_upload_form').get(0));
    $.ajax({
        url: "<%=uploadURL %>",
        type: 'POST',
        data: fd,
        processData: false,
        contentType: false,
        dataType: 'json'
    })
        .done(function( data ) {
        if(data['upload_result'] == 'YES'){
            //Do sometihng
        }
        else{
            //Do something
        }
    });
}

///// SERVLET(Slim3 Controller) (/handler) ///////

private Navigation doPost() {
HttpServletRequest httpServletRequest = RequestLocator.get();
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(httpServletRequest);
List<BlobKey> blobKeys = blobs.get("uploaded_file");
BlobKey fileKey = blobKeys.get(0);
BlobInfoFactory blobInfoFactory = new BlobInfoFactory();
BlobInfo blobInfo = blobInfoFactory.loadBlobInfo(fileKey);

String originalFileName = blobInfo.getFilename();
long filesize = blobInfo.getSize();
//String gcsObjectName = blobInfo.getGsObjectName(); <<-- Most important thing is not available.

if(blobKey!=null){
    String result = "{\"upload_result\":\"YES\"}";
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json");
        try {
            response.getWriter().println(result);
        } catch (IOException e) {
            e.printStackTrace();
        }
}
return null;

编辑。使用FileInfo而不是BlobInfo来获取生成的GCS对象名。以下是本案例的工作代码。

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, List<FileInfo>> fileInfos = blobstoreService.getFileInfos(request);
List<FileInfo> infos = fileInfos.get("uploaded_file");
FileInfo info = infos.get(0);
String gcsObjectName = info.getGsObjectName(); // <--

共有1个答案

师建德
2023-03-14

blob密钥是gcs和blobstore的唯一标识符——更多详细信息请参见此处https://cloud.google.com/appengine/docs/java/blobstore/#Java_Using_the_Blobstore_API_with_Google_Cloud_Storage.对于地面军事系统,您可以使用以下命令

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
BlobKey blobKey = blobstoreService.createGsBlobKey(
    "/gs/" + fileName.getBucketName() + "/" + fileName.getObjectName());
blobstoreService.serve(blobKey, resp);
 类似资料:
  • 问题 上传文件,并将其保存到预先设定的某个目录下。 方法 import web urls = ('/upload', 'Upload') class Upload: def GET(self): web.header("Content-Type","text/html; charset=utf-8") return """<html><head></he

  • 本文向大家介绍php限制上传文件类型并保存上传文件的方法,包括了php限制上传文件类型并保存上传文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php限制上传文件类型并保存上传文件的方法。分享给大家供大家参考。具体如下: 下面的代码演示了php中如何获取用户上传的文件,并限制文件类型的一般图片文件,最后保存到服务器 希望本文所述对大家的php程序设计有所帮助。

  • 我正在尝试使用多部分实体方法上传文件。但它失败,错误说{“错误”:“文件参数值'无'无效”} 我的代码是: File File = new File(" C:/Users/SST-06/Desktop/new . txt "); 我的实体文件包含所有提到的参数。 -hkYO-pblk 0 uqlxjtvklrbkosxz 7 mye-8 wbvbvanx Content-Disposition:f

  • 问题内容: 我正在使用此代码上传文件(图像到文件夹) 当文件(图像)保存在指定路径时…如果我想用某个所需的名称保存文件…。 我曾尝试更换此 有了这个 但是它不起作用 问题答案: 你可以试试看

  • 我需要帮助保存上传的文件名在数据库表中使用laravel 5.1。 保存图像详细信息的我的控制器代码 接受图像的我的视图代码 此控制器代码存储图像正常工作,但我试图将图像文件名保存到表中,此代码将filepath存储到数据库表中。 由于我使用直接创建()方法在表中存储请求对象,我不知道如何存储文件名而不是路径。 检查此图像中的表数据

  • 问题内容: 对于我的论坛,我尝试使用以下方式上传带有html的文件: 我的python函数获取该文件,在用户配置文件下创建一个文件,并将数据写入其中: 所以,如果我想成为我的图片,我把它上传,蟒蛇需要的是并创建与该名称的文件使用,然后将数据写入到它(这应该是图像)。 但是由于某种原因,我没有图像。 接下来我应该尝试什么? 问题答案: 将表单的设置为