一、S3 Browser 8-1-15 简介
S3 Browser 8-1-15是Amazon S3的客户端应用程序,用于管理和操作Amazon S3存储桶和对象。
二、安装包
下载地址:百度网盘 请输入提取码
提取码:9acn
三、基础操作
1)连接客户端
1、通过S3 Browser连接上客户端。
2、Account Name暂时不知道作用,应该是创建account时候固定的名称。
这里我用的已经创建的参数进行连接。
2)上传、下载
1、现在代码里用的桶是itpms的,路径需要自己创建。
2、创建路径
支持链式创建目录:
3、上传文件
可以可视化界面上传,也可以直接拖拽文件到界面。
4、下载文件
选中文件,点击Download
JAVA代码-上传下载
private boolean s3Enable = false;@PostConstructprivate synchronized void init() throws AppException {s3Enable = Boolean.valueOf(ConfigUtil.getConfigFromPropertiesFirst("CONFIG_S3_ENABLE", "true"));if (s3Enable) {SysParameter accessKeyParamter = "S3_ACCESSKEY";SysParameter secretKeyParamter = "S3_SECRETKEY";SysParameter bucketNameParamter = "S3_BUCKETNAME";SysParameter endpointParamter = "S3_ENDPOINT";SysParameter bufferSizeParamter = "S3_BUFFER");SysParameter archiveWsdlLocationParamter = "CONFIG_ARCHIVE_WSDL_LOCATION";SysParameter s3EnableParameter = "CONFIG_S3_ENABLE";checkSysParameter(accessKeyParamter, secretKeyParamter, bucketNameParamter, endpointParamter,bufferSizeParamter, archiveWsdlLocationParamter, s3EnableParameter);accessKey = accessKeyParamter.getPvalue();secretKey = secretKeyParamter.getPvalue();bucketName = bucketNameParamter.getPvalue();endpoint = endpointParamter.getPvalue();bufferSize = Integer.valueOf(bufferSizeParamter.getPvalue());archiveWsdlLocation = archiveWsdlLocationParamter.getPvalue();s3Enable = Boolean.valueOf(s3EnableParameter.getPvalue());AmazonS3 conn = getS3();if (!conn.doesBucketExist(bucketName)) {LOGGER.info("Bucket name:[{}] 不存在,新建该Bucket", bucketName);conn.createBucket(bucketName);}LOGGER.info("初始化S3客户端完成,Endpoint:[{}], Bucket name:[{}],", endpoint, bucketName);} else {LOGGER.info("不启用S3客户端。");}}private AmazonS3 getS3() {AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);ClientConfiguration clientConfig = new ClientConfiguration();clientConfig.setProtocol(Protocol.HTTP);EndpointConfiguration endpointConfiguration = new EndpointConfiguration(endpoint, Regions.CN_NORTH_1.getName());AmazonS3 conn = AmazonS3Client.builder().withEndpointConfiguration(endpointConfiguration).withClientConfiguration(clientConfig).withCredentials(new AWSStaticCredentialsProvider(credentials))// 是否使用路径方式.withPathStyleAccessEnabled(Boolean.TRUE).build();return conn;}/** * 文件下载 * * @param path * @param response * @throws AppException */@Overridepublic void fileDownload(String path, HttpServletResponse response) throws AppException {// path是指欲下载的文件的路径。File file = new File(path);String fileName = file.getName();// 取得文件名。LOGGER.info("下载文件名:{}", fileName);LOGGER.info("下载S3文件路径:{}", path);// 如果本地有存,无需下载if (file.exists()) {try (InputStream is = new BufferedInputStream(new FileInputStream(file))) {downloadFile(response, fileName, is);} catch (Exception e) {throw new AppException("Download file err. ", e);}} else {if (s3Enable) {path = formatS3Filename(path);LOGGER.info("format之后S3文件路径:{}", path);AmazonS3 conn = getS3();try {S3Object s3Object = conn.getObject(new GetObjectRequest(bucketName, path));if (s3Object != null) {LOGGER.debug("s3_content-type : {}", s3Object.getObjectMetadata().getContentType());LOGGER.debug("s3_etag : {}", s3Object.getObjectMetadata().getETag());LOGGER.debug("s3_content_length : {}", s3Object.getObjectMetadata().getContentLength());// 创建文件夹和文件FileUtils.createFolderAndFile(file);try (InputStream is = s3Object.getObjectContent();OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) {IOUtils.copy(is, os);} catch (IOException e) {LOGGER.error("下载文件报错", e);throw new AppException("下载文件报错", e);}if (file.exists()) {try {InputStream downloadFileIs = new FileInputStream(file);downloadFile(response, fileName, downloadFileIs);} catch (FileNotFoundException e) {throw new AppException("下载文件报错", e);}}}} catch (SdkClientException | IOException e) {throw new AppException("下载文件失败", e);}}}}private String formatS3Filename(String path) {if (path == null) {return null;}path = FilenameUtils.separatorsToUnix(path);path = path.startsWith("/") " /> 0) {outputStream.write(buffer, 0, length);}} catch (IOException e) {LOGGER.error("Download file from s3 err. ", e);throw new AppException("下载文件失败", e);}}/** * 文件上传 * * @param request * @throws IOException * @throws IllegalStateException */@Overridepublic File fileUpload(String uploadDir, HttpServletRequest request) throws AppException {MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;MultipartFile file = multipartRequest.getFile("file");if (file == null) {return null;}try {File targetFile = FileDownAndUpload.filedUpload(uploadDir, multipartRequest);String bigRealFilePath = targetFile.getPath();if (s3Enable) {return fileSaveByPath(bigRealFilePath, targetFile);} else {return targetFile;}} catch (Exception e) {LOGGER.error("上传文件失败", e);throw new AppException("上传文件失败", e);}} /** * 文件上传,仅支持服务器本地存储,不支持分布式存储,在分布式环境下可能找不到文件。 * * @param request * @throws IOException * @throws IllegalStateException */@Deprecatedpublic static File filedUpload(String uploadDir, HttpServletRequest request)throws AppException, IllegalStateException, IOException {MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;MultipartFile file = multipartRequest.getFile("file");// file= new String(file.getBytes("ISO-8859-1 ","UTF-8"));if (file == null) {// step-2 判断filereturn null;}String orgFileName = file.getOriginalFilename();orgFileName = (orgFileName == null) ? "" : orgFileName;Pattern p = Pattern.compile("\\s|\t|\r|\n");Matcher m = p.matcher(orgFileName);orgFileName = m.replaceAll("_");if (!(new File(uploadDir).exists())) {new File(uploadDir).mkdirs();}String sep = System.getProperty("file.separator");String timestring = DateUtils.formatDate(new Date(), "yyyyMMddHHmmssSSS");String bigRealFilePath =uploadDir + (uploadDir.endsWith(sep) ? "" : sep) + timestring + "_" + file.getOriginalFilename();logger.info("上传文件路径:" + bigRealFilePath);// 文件非空判断/* if (file.getSize() > 0) { */File targetFile = new File(bigRealFilePath);file.transferTo(targetFile);// 写入目标文件// 重命名// File newfile = ReName(targetFile);return targetFile;}