使用Java将文件上传到Google云存储中

Sre*_*nth 3 java google-app-engine file-upload google-cloud-storage

我一直在尝试长时间使用java在Google云端存储中上传文件。通过浏览我已经找到了此代码,但无法完全理解。任何人都可以自定义此文件,以在GCS中上传文件。任何人都可以帮助我实现这一目标。

// Given
InputStream inputStream;  // object data, e.g., FileInputStream
long byteCount;  // size of input stream

InputStreamContent mediaContent = new InputStreamContent("application/octet-stream", inputStream);
// Knowing the stream length allows server-side optimization, and client-side progress
// reporting with a MediaHttpUploaderProgressListener.
mediaContent.setLength(byteCount);

StorageObject objectMetadata = null;

if (useCustomMetadata) {
  // If you have custom settings for metadata on the object you want to set
  // then you can allocate a StorageObject and set the values here. You can
  // leave out setBucket(), since the bucket is in the insert command's
  // parameters.
  objectMetadata = new StorageObject()
      .setName("myobject")
      .setMetadata(ImmutableMap.of("key1", "value1", "key2", "value2"))
      .setAcl(ImmutableList.of(
          new ObjectAccessControl().setEntity("domain-example.com").setRole("READER"),
          new ObjectAccessControl().setEntity("user-administrator@example.com").setRole("OWNER")
          ))
      .setContentDisposition("attachment");
}

Storage.Objects.Insert insertObject = storage.objects().insert("mybucket", objectMetadata,
    mediaContent);

if (!useCustomMetadata) {
  // If you don't provide metadata, you will have specify the object
  // name by parameter. You will probably also want to ensure that your
  // default object ACLs (a bucket property) are set appropriately:
  // https://developers.google.com/storage/docs/json_api/v1/buckets#defaultObjectAcl
  insertObject.setName("myobject");
}

// For small files, you may wish to call setDirectUploadEnabled(true), to
// reduce the number of HTTP requests made to the server.
if (mediaContent.getLength() > 0 && mediaContent.getLength() <= 2 * 1000 * 1000 /* 2MB */) {
  insertObject.getMediaHttpUploader().setDirectUploadEnabled(true);
}

insertObject.execute();
Run Code Online (Sandbox Code Playgroud)

Yan*_* MG 5

从Java使用Google Cloud Storage的推荐方法是使用Cloud Storage客户端库

客户端GitHub页面提供了一些示例和资源,以学习如何正确使用它。

它还提供了此代码示例,作为如何使用客户端库将对象上传到Google Cloud Storage的示例:

import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import static java.nio.charset.StandardCharsets.UTF_8;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;

// Create your service object
Storage storage = StorageOptions.getDefaultInstance().getService();

// Create a bucket
String bucketName = "my_unique_bucket"; // Change this to something unique
Bucket bucket = storage.create(BucketInfo.of(bucketName));

// Upload a blob to the newly created bucket
BlobId blobId = BlobId.of(bucketName, "my_blob_name");
BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("text/plain").build();
Blob blob = storage.create(blobInfo, "a simple blob".getBytes(UTF_8));
Run Code Online (Sandbox Code Playgroud)


小智 1

我也尝试过使用 GCS,但它对我不起作用。最后,我使用 ServletFileUpload 类完成了。下面是我为了创建 Google Bucket 并将用户选择的文件上传到该 Bucket 而编写的代码:

package com1.KT1;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;

import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;


public class TestBucket extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        // Instantiates a client
        String targetFileStr ="";
        List<FileItem> fileName = null;
        Storage storage = StorageOptions.getDefaultInstance().getService();

        // The name for the new bucket
        String bucketName = "vendor-bucket13";  // "my-new-bucket";

        // Creates the new bucket
        Bucket bucket = storage.create(BucketInfo.of(bucketName));


        //Object requestedFile = request.getParameter("filename");


        ServletFileUpload sfu = new ServletFileUpload(new DiskFileItemFactory());
        try {
             fileName = sfu.parseRequest(request);
             for(FileItem f:fileName)
                {
                try {
                    f.write (new File("/Users/tkmajdt/Documents/workspace/File1POC1/" + f.getName()));
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                //targetFileStr = readFile("/Users/tkmajdt/Documents/workspace/File1POC1/" + f.getName(),Charset.defaultCharset());
                targetFileStr = new String(Files.readAllBytes(Paths.get("/Users/tkmajdt/Documents/workspace/File1POC1/" + f.getName())));
                }
        } 

    //response.getWriter().print("File Uploaded Successfully");


//String content = readFile("test.txt", Charset.defaultCharset());

        catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



        /*if(requestedFile==null)
        {
            response.getWriter().print("File Not Found");
        }*/
        /*else
        {
            //String fileName = (String)requestedFile;
            FileInputStream fisTargetFile = new FileInputStream(fileName);

            targetFileStr = IOUtils.toString(fisTargetFile, "UTF-8");
        }*/



        BlobId blobId = BlobId.of(bucketName, "my_blob_name");
        //Blob blob = bucket.create("my_blob_name", "a simple blob".getBytes("UTF-8"), "text/plain");
        Blob blob = bucket.create("my_blob_name", targetFileStr.getBytes("UTF-8"), "text/plain");

        //storage.delete("vendor-bucket3");
    }




}
Run Code Online (Sandbox Code Playgroud)

我将整个源代码上传到GitHub