アップロード分析 - ディレクトリの分離

同一目录下文件过多	

	只需要分目录就可以.
		1) 按照上传时间进行目录分离 (周、月 )
		2) 按照上传用户进行目录分离 ----- 为每个用户建立单独目录 
		3) 按照固定数量进行目录分离 ------ 假设每个目录只能存放3000个文件 ,
		   每当一个目录存满3000个文件后,创建一个新的目录
		4)按照文件名的hashcode进行目录分离.
			
		public static String generateRandomDir(String uuidFileName) {
			// 获得唯一文件名的hashcode
			int hashcode = uuidFileName.hashCode();
			// 获得一级目录
			int d1 = hashcode & 0xf;       
			// 获得二级目录
			int d2 = (hashcode >>> 4) & 0xf;

			return "/" + d2 + "/" + d1;// 共有256目录l
  • ディレクトリの下に、同じディレクトリの過剰な数を防止するためにファイルをアップロードするために使用されなければならない----分離アルゴリズム

1)に従って更新のディレクトリ分離(週、月)について

確立するために、ユーザーごとに個別のディレクトリとして単離さ2)アップロードDirectoryユーザー-----

3)------、ディレクトリがいっぱい3000ファイルであるときはいつでも、各ファイルのディレクトリのみ、3000を格納することができると仮定し、新しいディレクトリを作成し分離ディレクトリの固定された数に応じて行います

4)ディレクトリのハッシュコード固有のファイル名として単離しました 

       公共の静的な文字列generateRandomDir(文字列uuidFileName){

              //取得ハッシュコード一意のファイル名

              INTハッシュコード= uuidFileName.hashCode()。

              //ディレクトリを取得します。

              int型D1 =ハッシュコード&0xFの。      

              //二次ディレクトリを取得

              INT D2 =(ハッシュコード>>> 4)&0xFの。

 

              リターン "/" + D2 + "/" + D1; //合計256リットルディレクトリ

       }

 

  • ゴミ問題

通常の書き込み属性値用語歪み------------- fileItem.getString(コードセット)。

ファイル名にアップロードファイルが文字化け--------- fileupload.setHeaderEncoding(コードセット)。

package cn.learn.utils;

import java.io.File;
import java.util.UUID;

public class FileUploadUtils {

	// 得到上传文件真实名称 c:\a.txt a.txt
	public static String getRealName(String filename) {

		int index = filename.lastIndexOf("\\") + 1;

		return filename.substring(index);

	}

	// 获取随机名称 a.txt
	public static String getUUIDFileName(String filename) {
		int index = filename.lastIndexOf(".");
		if (index != -1) {

			return UUID.randomUUID() + filename.substring(index);
		} else {
			return UUID.randomUUID().toString();
		}
	}

	// 目录分离算法
	public static String getRandomDirectory(String filename) {

		// int hashcode = filename.hashCode();
		//
		// // System.out.println(hashcode);
		//
		// // int类型数据在内存中占32位。转换成16进制数,就得到8个16进制数
		// String hex = Integer.toHexString(hashcode);
		//
		// // System.out.println(hex); // 056d9363
		//
		// return "/" + hex.charAt(0) + "/" + hex.charAt(1);

		int hashcode = filename.hashCode();

		System.out.println(Integer.toBinaryString(hashcode));

		int a = hashcode & 0xf;

		hashcode = hashcode >>> 4;

		int b = hashcode & 0xf;

		return "/" + a + "/" + b;

	}

}

 

リリース2417元の記事 ウォン称賛62 ビュー20万+

おすすめ

転載: blog.csdn.net/Leon_Jinhai_Sun/article/details/105157216