百度雲存儲教程---免費建立自己的靜態站點

歡迎訪問的我個人網站:點擊打開鏈接--我的個人網站    想建設個人網站的朋友可以找我聊。無門檻,就能永遠自己的永久域名和服務器空間,完全免費哦

以前開發的網站苦於沒有云服務器,網站沒地方掛,現在百度出了雲存儲和應用引擎,可以讓開發者免費上傳動態站點和靜態站點。這篇文章,我準備用雲存儲的方式,存儲用戶的靜態網站,開發者可通過將靜態頁面上傳至雲存儲空間中,並將其訪問權限設置爲公開讀,即可實現靜態網站的效果。文章底部有源碼和項目下載。

一、實現效果

本地文件夾  


上傳成後百度雲存儲的文件 :  直接點擊index.html 就能瀏覽這個網頁了
這是我上傳的站點 :點擊打開鏈接
js文件夾中的文件全部爲公開



二、簡介

百度雲存儲,即BCS(Baidu Cloud Storage),提供object網絡存儲服務,旨在利用百度在分佈式以及網絡方面的優勢爲開發者提供安全、簡單、高效的存儲服務。

百度雲存儲提供了一系列簡單易用的REST API接口、SDK、工具和方案,使得開發者可以在任何時間、任何地點存儲任何類型的數據。通過使用百度雲存儲服務,開發者可以輕鬆地開發出擴展性強、穩定性好、安全快速的分佈式網絡服務;通過使用雲存儲服務提供的API、SDK及管理平臺,開發者也可以迅速開發出適合各種業務的網絡程序。

百度雲存儲可以支持文本、多媒體、二進制等任何類型的數據,支持簽名認證及ACL權限設置進行資源訪問控制,開發者可以通過管理控制檯直接進行頁面上傳、下載或通過REST API、Shell Tool、SDK、curl等方式實現上傳、下載。

雲存儲功能

百度雲存儲服務主要提供以下功能供開發者使用:

  功能 描述
1 支持任何類型數據的上傳和下載 文本、多媒體、日誌、二進制等類型數據
2 強大的元信息機制 開發者可以使用通用的和自定義的元信息機制來定義資源屬性。
3 超大容量 雲存儲支持0-2T的單文件數據容量,同時對object的個數沒有限制;雲存儲提供superfile接口,可以實現2T超大文件的上傳和下載。
4 分片上傳、斷點下載功能。 該功能在網絡不穩定的環境下具有非常好的表現。
5 Restful風格的HTTP接口多語言SDK工具,可極大提高開發者的開發效率。 瞭解RESTful的相關信息,可參考http://en.wikipedia.org/wiki/Representational_State_Transfer
6 簽名認證方案 基於公鑰和密鑰的認證方案可適應靈活的業務需求。
7 強大的ACL權限控制 開發者可通過ACL設置資源的權限(公開或私有),也可授權特定用戶具有特定權限。
8 功能完善的管理平臺 開發者可通過管理中心對所有資源進行統一管理。
9 靜態網頁託管 開發者可通過將靜態頁面上傳至雲存儲空間中,並將其訪問權限設置爲公開讀,即可實現靜態網站的效果。
第九點非常酷,網站設計師可以把網頁託管到百度雲了

詳見:http://developer.baidu.com/wiki/index.php?title=docs/cplat/bcs  

三、 基本使用

概述

本文主要面向百度雲存儲服務的開發者,開發者可通過此文學習如何使用百度雲存儲進行開發。

使用百度雲存儲服務進行開發的具體步驟如下:

創建應用並獲取密鑰對(ak&sk)

使用雲存儲服務,需要首先創建應用並獲取應用密鑰對。操作步驟如下:

1. 在管理中心創建一個應用

2. 在應用基本信息頁,獲取相應的“API key 及 Secret Key”

創建bucket

創建Bucket,可通過以下三種方式來實現:

1. 通過雲存儲管理控制檯創建bucket。可以把bucket看成是命名空間,您的數據就存儲在這個bucket裏面。
2. 通過調用 REST API接口 Put_Bucket實現
3. 通過SDK,調用相關接口來實現

上傳文件

使用雲存儲服務上傳文件有以下四種途徑:

1. 使用Shell Tool上傳
2. 使用SDK進行上傳
3. 直接使用curl命令上傳
4. 通過雲存儲管理控制檯上傳

bucket

雲存儲bucket可以看成是命名空間,其名稱全局唯一,如果某個名稱已創建,則其他開發者將無法再創建相同名稱的bucket;開發者上傳的任何數據必須是屬於某個bucket。上傳任何數據之前需先確認是否已經創建bucket。 有關bucket的命名限制,請參考#約束與限制。 創建bucket有以下兩種方式:

object

Object是BCS中的基本存儲實體,由Key(鍵)、Data(數據)及MetaData (元數據)組成。

  • Key(鍵):

指object的唯一標識,其命名必須以“/”開頭,有關object的命名限制,請參考#約束與限制。 如: mystorage/test/我的文件.txt

  • Data(數據):
object可支持文本、多媒體、二進制等任何類型的數據,開發者可以利用object API實現上傳、下載及獲取object列表的功能。

普通文件的文件大小最大爲2GB, 對於更大的超大文件(最大支持2TB)可通過put superfile API來實現。

  • MetaData (元數據):
存儲object的相關屬性的描述性信息,爲 k-v 組合。

三、 java代碼實現

我們要實現批量文件上傳和權限的控制。請看下文
在Sample.java中輸入自己的accessKey和 secretKey ,就能運行其中的基本實例了。

上傳文件到雲存儲的函數
**
     * 
     * @param baiduBCS
     * @param bucket     倉庫名
     * @param object     上傳到倉庫中的對象
     * @param destFile    本地需要上傳的文件對象
     * @param contentType     文件類型
     */
    public static void putObjectByFile(BaiduBCS baiduBCS,String bucket,String object,File destFile,String contentType) {
        PutObjectRequest request = new PutObjectRequest(bucket, object, destFile);
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentType(contentType);

        request.setMetadata(metadata);
        BaiduBCSResponse<ObjectMetadata> response = baiduBCS.putObject(request);
        ObjectMetadata objectMetadata = response.getResult();
        log.info("x-bs-request-id: " + response.getRequestId());
        log.info(objectMetadata);
    }

這裏涉及到三個問題,
第一個是文件類型的獲取, 就是ContentType,我們知道 .html文件 的文件類型是  text/html  .css的文件類型是 text/css我們需要指定文件類型。
第二個是文件的權限,文件上傳後,默認的權限是私有的,無法訪問。 
第三個問題,一次只能上傳一個文件,如果我有一個文件夾需要上傳呢,這樣操作不方便。

所以有了以下的解決辦法。遍歷文件批量上傳,並且控制文件的權限
權限控制:
  /**
     * 修改文件的權限
     * @param baiduBCS  存儲上下文
     * @param bucket 存儲倉庫
     * @param object 文件對象
     * @param acl 控制權限  
     */
    public static void putObjectPolicyByX_BS_ACL(BaiduBCS baiduBCS,String bucket ,String object,X_BS_ACL acl) {
        baiduBCS.putObjectPolicy(bucket, object, acl);
    }

ACL的取值有:Private, PublicRead, PublicWrite, PublicReadWrite, PublicControl;
默認爲private,PublicRead,或者PublicReadWrite  就能公開訪問了。


下載完sdk後,就開始動手吧

在項目中引入百度的sdk : bcs-sdk-java_1.4.5.jar



mavne 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>baiduBCS</groupId>
    <artifactId>baiduBCS</artifactId>
    <version>1.0-SNAPSHOT</version>
            <dependencies>
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>1.2.17</version>
                </dependency>
                <dependency>
                    <groupId>net.sf.flexjson</groupId>
                    <artifactId>flexjson</artifactId>
                    <version>2.1</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.httpcomponents</groupId>
                    <artifactId>httpclient</artifactId>
                    <version>4.3.1</version>
                </dependency>
                <dependency>
                    <groupId>commons-codec</groupId>
                    <artifactId>commons-codec</artifactId>
                    <version>1.8</version>
                </dependency>
            </dependencies>
    
</project>

批量上傳的源碼:
import com.baidu.inf.iis.bcs.BaiduBCS;
import com.baidu.inf.iis.bcs.model.X_BS_ACL;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Properties;

/**
 * Created with IntelliJ IDEA.
 * User: liu.xing
 * Date: 14-1-20
 * Time: 下午7:23
 * coding for fun and coding my life!
 */
public class MultipUpload {
    static String filePrefix = "E:/站點/innos";
    static int len = filePrefix.length();
    private static ArrayList filelist = new ArrayList();
    static String bucket = "innosrom";     //文件倉庫名
    static String bcsDir = "/webDesgin/01/";  //文件存放目錄

    static String object = "";             //文件對象本身
    static BaiduBCS bcs;
    static Properties pro;


    public static void main(String[] args) {
        MultipUpload mu = new MultipUpload();
        long a = System.currentTimeMillis();
        pro = mu.loadFileContentType();    //載入文件格式對應的文檔類型
        bcs = Sample.init();              //初始化百度雲存儲環境
        mu.refreshFileList(filePrefix);   //遍歷文件
        System.out.println(System.currentTimeMillis() - a);
    }

    /**
     * 遍歷文件
     * @param strPath 文件夾路徑
     */
    public void refreshFileList(String strPath) {
        File dir = new File(strPath);
        File[] files = dir.listFiles();

        if (files == null)
            return;
        for (int i = 0; i < files.length; i++) {
            String absPath = files[i].getAbsolutePath();
            if (files[i].isDirectory()) {
                refreshFileList(absPath);
            } else {
                String strFileName = absPath.replace("\\", "/");
                object = bcsDir + strFileName.substring(len + 1);
                String contentType = getContentType(object,pro);
                System.out.println(object+"\t"+contentType);
                Sample.putObjectByFile(bcs, bucket, object, new File(absPath),contentType);
                Sample.putObjectPolicyByX_BS_ACL(bcs, bucket, object, X_BS_ACL.PublicReadWrite);
                //deleteAll(bcs,object);
            }
        }
    }

    /**
     * 根據文件名獲取ContentType
     * @param object    文件名
     * @param pro      contentType-file 對應的 Properties對象
     * @return      ContentType
     */
    private String getContentType(String object,Properties pro) {

        if(object.contains(".")){
            int index = object.lastIndexOf(".");
            String suffix = object.substring(index+1);     //獲取文件後綴
            Object contentType = pro.get(suffix);
            if(contentType != null)
                return contentType.toString();
        }
        return "text/html";
    }
    public void deleteAll(BaiduBCS bcs,String object){
        Sample.deleteObject(bcs,object);
    }

    /**
     * 載入ContentType 文件
     * @return
     */
    public Properties loadFileContentType(){
        InputStream is = getClass().getClassLoader().getSystemResourceAsStream("contentType.proerties");
        Properties pro = new Properties();
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  pro;
    }


}

Smaple demo:
/***************************************************************************
 * 
 * Copyright (c) 2012 Baidu.com, Inc. All Rights Reserved
 * 
 **************************************************************************/
import java.io.*;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

import com.baidu.inf.iis.bcs.model.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.baidu.inf.iis.bcs.BaiduBCS;
import com.baidu.inf.iis.bcs.auth.BCSCredentials;
import com.baidu.inf.iis.bcs.auth.BCSSignCondition;
import com.baidu.inf.iis.bcs.http.HttpMethodName;
import com.baidu.inf.iis.bcs.policy.Policy;
import com.baidu.inf.iis.bcs.policy.PolicyAction;
import com.baidu.inf.iis.bcs.policy.PolicyEffect;
import com.baidu.inf.iis.bcs.policy.Statement;
import com.baidu.inf.iis.bcs.request.CreateBucketRequest;
import com.baidu.inf.iis.bcs.request.GenerateUrlRequest;
import com.baidu.inf.iis.bcs.request.GetObjectRequest;
import com.baidu.inf.iis.bcs.request.ListBucketRequest;
import com.baidu.inf.iis.bcs.request.ListObjectRequest;
import com.baidu.inf.iis.bcs.request.PutObjectRequest;
import com.baidu.inf.iis.bcs.request.PutSuperfileRequest;
import com.baidu.inf.iis.bcs.response.BaiduBCSResponse;

@SuppressWarnings("unused")
public class Sample {
	private static final Log log = LogFactory.getLog(Sample.class);
	// ----------------------------------------
	static String host = "bcs.duapp.com";
	static String accessKey = "您自己的私鑰";
	static String secretKey = "您自己的密鑰";
	static String bucket = "innosrom";
	// ----------------------------------------
	static String object = "/index.jsp";
	static File destFile = new File("C:\\BCS\\up.txt");
	static File saveFile = new File("C:\\BCS\\download.txt");
    public static BaiduBCS init(){
        BCSCredentials credentials = new BCSCredentials(accessKey, secretKey);
        BaiduBCS baiduBCS = new BaiduBCS(credentials, host);
        // baiduBCS.setDefaultEncoding("GBK");
         baiduBCS.setDefaultEncoding("UTF-8"); // Default UTF-8
        return  baiduBCS;
    }

	/**
	 * @param args
	 * @throws java.net.URISyntaxException
	 * @throws java.io.IOException
	 */
	public static void main(String[] args) throws URISyntaxException, IOException {
       // PropertyConfigurator.configure("log4j.properties");

		BCSCredentials credentials = new BCSCredentials(accessKey, secretKey);
		BaiduBCS baiduBCS = new BaiduBCS(credentials, host);
		// baiduBCS.setDefaultEncoding("GBK");
		baiduBCS.setDefaultEncoding("UTF-8"); // Default UTF-8
		try {
			// -------------bucket-------------
			// listBucket(baiduBCS);
			// createBucket(baiduBCS);
			// deleteBucket(baiduBCS);
			// getBucketPolicy(baiduBCS);
			// putBucketPolicyByPolicy(baiduBCS);
			// putBucketPolicyByX_BS_ACL(baiduBCS, X_BS_ACL.PublicControl);
			// listObject(baiduBCS);
			// ------------object-------------
			//putObjectByFile(baiduBCS);
			 //putObjectByInputStream(baiduBCS);
            //getObjectWithDestFile(baiduBCS);
			// putSuperfile(baiduBCS);
			 //deleteObject(baiduBCS);
			 //getObjectMetadata(baiduBCS);
			// setObjectMetadata(baiduBCS);
			// copyObject(baiduBCS, bucket, object + "_copy" +
			// (System.currentTimeMillis()));
			//getObjectPolicy(baiduBCS);
			 //putObjectPolicyByPolicy(baiduBCS);
			 putObjectPolicyByX_BS_ACL(baiduBCS, X_BS_ACL.PublicReadWrite);

			// ------------common------------------
			//generateUrl( baiduBCS);
		} catch (BCSServiceException e) {
			log.warn("Bcs return:" + e.getBcsErrorCode() + ", " + e.getBcsErrorMessage() + ", RequestId=" + e.getRequestId());
		} catch (BCSClientException e) {
			e.printStackTrace();
		}
	}

	public static void generateUrl(BaiduBCS baiduBCS) {
		GenerateUrlRequest generateUrlRequest = new GenerateUrlRequest(HttpMethodName.GET, bucket, object);
		generateUrlRequest.setBcsSignCondition(new BCSSignCondition());
		generateUrlRequest.getBcsSignCondition().setIp("*");
		//generateUrlRequest.getBcsSignCondition().setTime(123455L);
		//generateUrlRequest.getBcsSignCondition().setSize(123455L);
		System.out.println(baiduBCS.generateUrl(generateUrlRequest));
	}

	public static void copyObject(BaiduBCS baiduBCS, String destBucket, String destObject) {
		ObjectMetadata objectMetadata = new ObjectMetadata();
		objectMetadata.setContentType("image/jpeg");
		baiduBCS.copyObject(new Resource(bucket, object), new Resource(destBucket, destObject), objectMetadata);
		baiduBCS.copyObject(new Resource(bucket, object), new Resource(destBucket, destObject), null);
		baiduBCS.copyObject(new Resource(bucket, object), new Resource(destBucket, destObject));
	}

	private static void createBucket(BaiduBCS baiduBCS) {
		// baiduBCS.createBucket(bucket);
		baiduBCS.createBucket(new CreateBucketRequest(bucket, X_BS_ACL.PublicRead));
	}

	private static void deleteBucket(BaiduBCS baiduBCS) {
		baiduBCS.deleteBucket(bucket);
	}

	public static void deleteObject(BaiduBCS baiduBCS,String object) {
		Empty result = baiduBCS.deleteObject(bucket, object).getResult();
		log.info(result);
	}

	private static void getBucketPolicy(BaiduBCS baiduBCS) {
		BaiduBCSResponse<Policy> response = baiduBCS.getBucketPolicy(bucket);

		log.info("After analyze: " + response.getResult().toJson());
		log.info("Origianal str: " + response.getResult().getOriginalJsonStr());
	}

	public static void getObjectMetadata(BaiduBCS baiduBCS) {
		ObjectMetadata objectMetadata = baiduBCS.getObjectMetadata(bucket, object).getResult();
		log.info(objectMetadata);
	}

	private static void getObjectPolicy(BaiduBCS baiduBCS) {
		BaiduBCSResponse<Policy> response = baiduBCS.getObjectPolicy(bucket, object);
		log.info("After analyze: " + response.getResult().toJson());
		log.info("Origianal str: " + response.getResult().getOriginalJsonStr());
	}

	private static void getObjectWithDestFile(BaiduBCS baiduBCS) {
		GetObjectRequest getObjectRequest = new GetObjectRequest(bucket, object);
        baiduBCS.getObject(getObjectRequest, saveFile);
    }

	private static void listBucket(BaiduBCS baiduBCS) {
		ListBucketRequest listBucketRequest = new ListBucketRequest();
		BaiduBCSResponse<List<BucketSummary>> response = baiduBCS.listBucket(listBucketRequest);
		for (BucketSummary bucket : response.getResult()) {
			log.info(bucket);
		}
	}

	private static void listObject(BaiduBCS baiduBCS) {
		ListObjectRequest listObjectRequest = new ListObjectRequest(bucket);
		listObjectRequest.setStart(0);
		listObjectRequest.setLimit(20);
		// ------------------by dir
		{
			// prefix must start with '/' and end with '/'
			// listObjectRequest.setPrefix("/1/");
			// listObjectRequest.setListModel(2);
		}
		// ------------------only object
		{
			// prefix must start with '/'
			// listObjectRequest.setPrefix("/1/");
		}
		BaiduBCSResponse<ObjectListing> response = baiduBCS.listObject(listObjectRequest);
		log.info("we get [" + response.getResult().getObjectSummaries().size() + "] object record.");
		for (ObjectSummary os : response.getResult().getObjectSummaries()) {
			log.info(os.toString());
		}
	}

	private static void putBucketPolicyByPolicy(BaiduBCS baiduBCS) {
		Policy policy = new Policy();
		Statement st1 = new Statement();
		st1.addAction(PolicyAction.all).addAction(PolicyAction.get_object);
		st1.addUser("zhengkan").addUser("zhangyong01");
		st1.addResource(bucket + "/111").addResource(bucket + "/111");
		st1.setEffect(PolicyEffect.allow);
		policy.addStatements(st1);
		baiduBCS.putBucketPolicy(bucket, policy);
	}

	private static void putBucketPolicyByX_BS_ACL(BaiduBCS baiduBCS, X_BS_ACL acl) {
		baiduBCS.putBucketPolicy(bucket, acl);
	}

	public static void putObjectByFile(BaiduBCS baiduBCS) {
        PutObjectRequest request = new PutObjectRequest(bucket, object, destFile);
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentType("text/html");

        request.setMetadata(metadata);
        BaiduBCSResponse<ObjectMetadata> response = baiduBCS.putObject(request);
        ObjectMetadata objectMetadata = response.getResult();
        log.info("x-bs-request-id: " + response.getRequestId());
        log.info(objectMetadata);
    }

    /**
     *
     * @param baiduBCS
     * @param bucket     倉庫名
     * @param object     上傳到倉庫中的對象
     * @param destFile    本地需要上傳的文件對象
     * @param contentType     文件類型
     */
    public static void putObjectByFile(BaiduBCS baiduBCS,String bucket,String object,File destFile,String contentType) {
        PutObjectRequest request = new PutObjectRequest(bucket, object, destFile);
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentType(contentType);

        request.setMetadata(metadata);
        BaiduBCSResponse<ObjectMetadata> response = baiduBCS.putObject(request);
        ObjectMetadata objectMetadata = response.getResult();
        log.info("x-bs-request-id: " + response.getRequestId());
        log.info(objectMetadata);
    }

	public static void putObjectByInputStream(BaiduBCS baiduBCS) throws FileNotFoundException {
		File file = createSampleFile();
		InputStream fileContent = new FileInputStream(file);
		ObjectMetadata objectMetadata = new ObjectMetadata();
		objectMetadata.setContentType("text/html");
		objectMetadata.setContentLength(file.length());
		PutObjectRequest request = new PutObjectRequest(bucket, object, fileContent, objectMetadata);
		ObjectMetadata result = baiduBCS.putObject(request).getResult();
		log.info(result);
	}

	private static void putObjectPolicyByPolicy(BaiduBCS baiduBCS) {
		Policy policy = new Policy();
		Statement st1 = new Statement();
		st1.addAction(PolicyAction.all).addAction(PolicyAction.get_object);
		st1.addUser("zhengkan").addUser("zhangyong01");
		st1.addResource(bucket + object).addResource(bucket + object);
		st1.setEffect(PolicyEffect.allow);
		policy.addStatements(st1);
		baiduBCS.putObjectPolicy(bucket, object, policy);
	}

	private static void putObjectPolicyByX_BS_ACL(BaiduBCS baiduBCS, X_BS_ACL acl) {
        baiduBCS.putObjectPolicy(bucket, object, acl);
    }

    /**
     * 修改文件的權限
     * @param baiduBCS  存儲上下文
     * @param bucket 存儲倉庫
     * @param object 文件對象
     * @param acl 控制權限
     */
    public static void putObjectPolicyByX_BS_ACL(BaiduBCS baiduBCS,String bucket ,String object,X_BS_ACL acl) {
        baiduBCS.putObjectPolicy(bucket, object, acl);
    }

	public static void putSuperfile(BaiduBCS baiduBCS) {
		List<SuperfileSubObject> subObjectList = new ArrayList<SuperfileSubObject>();
		// 0
		BaiduBCSResponse<ObjectMetadata> response1 = baiduBCS.putObject(bucket, object + "_part0", createSampleFile());
		subObjectList.add(new SuperfileSubObject(bucket, object + "_part0", response1.getResult().getETag()));
		// 1
		BaiduBCSResponse<ObjectMetadata> response2 = baiduBCS.putObject(bucket, object + "_part1", createSampleFile());
		subObjectList.add(new SuperfileSubObject(bucket, object + "_part1", response2.getResult().getETag()));
		// put superfile
		PutSuperfileRequest request = new PutSuperfileRequest(bucket, object + "_superfile", subObjectList);
		BaiduBCSResponse<ObjectMetadata> response = baiduBCS.putSuperfile(request);
		ObjectMetadata objectMetadata = response.getResult();
		log.info("x-bs-request-id: " + response.getRequestId());
		log.info(objectMetadata);
	}

	public static void setObjectMetadata(BaiduBCS baiduBCS) {
		ObjectMetadata objectMetadata = new ObjectMetadata();
		objectMetadata.setContentType("text/html12");
		baiduBCS.setObjectMetadata(bucket, object, objectMetadata);
	}

	private static File createSampleFile() {
		try {
			File file = File.createTempFile("java-sdk-", ".txt");
			file.deleteOnExit();

			Writer writer = new OutputStreamWriter(new FileOutputStream(file));
			writer.write("01234567890123456789\n");
			writer.write("01234567890123456789\n");
			writer.write("01234567890123456789\n");
			writer.write("01234567890123456789\n");
			writer.write("01234567890123456789\n");
			writer.close();

			return file;
		} catch (IOException e) {
			log.error("tmp file create failed.");
			return null;
		}
	}
}

文件類型和後綴對應表 contentType.proerties
參考我的另外一篇文章:





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章