Java上传图片到OSS

上传主方法


package cn.osworks.aos.huijia.modules.utils;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSErrorCode;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.ServiceException;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;


public class UploadFile {
/**
* 阿里云ACCESS_ID
*/
// ID:aQFi66LcWwC8TbWP
// KEY:UIahtOgRNT4nPpykOorrDsl3K22Pas


private static String ACCESS_ID = "LTAIxXgQ6Zj1pwb7";
/**
* 阿里云ACCESS_KEY
*/
private static String ACCESS_KEY = "3bV63KYqCBpoXjiFIjAImIW3Venv7l";
/**
* 阿里云OSS_ENDPOINT 青岛Url
*/
private static String OSS_ENDPOINT = "http://oss-cn-beijing.aliyuncs.com";


/**
* 阿里云BUCKET_NAME OSS
*/
private static String BUCKET_NAME = "huijw";

public static String BTY(String Objectkey,String uploadFilePath){
OSSClient client = new OSSClient(OSS_ENDPOINT, ACCESS_ID, ACCESS_KEY);
try {
ensureBucket(client, BUCKET_NAME);
setBucketPublicReadable(client, BUCKET_NAME);


System.out.println("正在上传...");
uploadFile(client, BUCKET_NAME, Objectkey, uploadFilePath);

// client.deleteObject(BUCKET_NAME, Objectkey);
// deleteBucket(client, Objectkey);
// System.out.println("正在下载...");
// downloadFile(client, BUCKET_NAME, Objectkey, downloadFilePath);
} catch (Exception e) {
e.printStackTrace();
} finally {

}
return Objectkey;
}



public static void main(String[] args) {
// String bucketName = "demo10";
String Objectkey = "head/banner-4.png";


String uploadFilePath = "D:/banner-4.png";
// String downloadFilePath = "/Users/liaomc/Desktop/hs2.jpg";


// 如果你想配置OSSClient的一些细节的参数,可以在构造OSSClient的时候传入ClientConfiguration对象。
// ClientConfiguration是OSS服务的配置类,可以为客户端配置代理,最大连接数等参数。
// 具体配置看http://aliyun_portal_storage.oss.aliyuncs.com/oss_api/oss_javahtml/OSSClient.html#id2
// ClientConfiguration conf = new ClientConfiguration();
// OSSClient client = new OSSClient(OSS_ENDPOINT, ACCESS_ID, ACCESS_KEY,
// conf);
// 创建ClientConfiguration实例


// 使用默认的OSS服务器地址创建OSSClient对象,不叫OSS_ENDPOINT代表使用杭州节点,青岛节点要加上不然包异常
OSSClient client = new OSSClient(OSS_ENDPOINT, ACCESS_ID, ACCESS_KEY);
try {
ensureBucket(client, BUCKET_NAME);
setBucketPublicReadable(client, BUCKET_NAME);


System.out.println("正在上传...");
uploadFile(client, BUCKET_NAME, Objectkey, uploadFilePath);


// client.deleteObject(BUCKET_NAME, Objectkey);
// deleteBucket(client, Objectkey);
// System.out.println("正在下载...");
// downloadFile(client, BUCKET_NAME, Objectkey, downloadFilePath);
} catch (Exception e) {
e.printStackTrace();
} finally {

}
}
/**
* 上传文件

* @param client
*            OSSClient对象
* @param bucketName
*            Bucket名
* @param Objectkey
*            上传到OSS起的名
* @param filename
*            本地文件名
* @throws OSSException
* @throws ClientException
* @throws FileNotFoundException
*/
private static void uploadFile(OSSClient client, String bucketName,
String Objectkey, String filename) throws OSSException,
ClientException, FileNotFoundException {
File file = new File(filename);
ObjectMetadata objectMeta = new ObjectMetadata();
//String md5 = objectMeta.getContentMD5();
//System.out.println(md5);
objectMeta.setContentLength(file.length());
// 判断上传类型,多的可根据自己需求来判定
if (filename.endsWith("xml")) {
objectMeta.setContentType("text/xml");
} else if (filename.endsWith("jpg")) {
objectMeta.setContentType("image/jpeg");
} else if (filename.endsWith("png")) {
objectMeta.setContentType("image/png");
}


InputStream input = new FileInputStream(file);
PutObjectResult result = client.putObject(bucketName, Objectkey, input,
objectMeta);
// 打印ETag
System.out.println(result.getETag());
//if (md5.equals(result.getETag()))
System.out.println("上传完成");
}


/**
* 创建Bucket

* @param client
*            OSSClient对象
* @param bucketName
*            BUCKET名
* @throws OSSException
* @throws ClientException
*/
public static void ensureBucket(OSSClient client, String bucketName)
throws OSSException, ClientException {
try {
client.createBucket(bucketName);
client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
} catch (ServiceException e) {
if (!OSSErrorCode.BUCKET_ALREADY_EXISTS.equals(e.getErrorCode())) {
throw e;
}
}
}


/**
* 删除一个Bucket和其中的Objects

* @param client
*            OSSClient对象
* @param bucketName
*            Bucket名
* @throws OSSException
* @throws ClientException
*/
private static void deleteBucket(OSSClient client, String bucketName)
throws OSSException, ClientException {
ObjectListing ObjectListing = client.listObjects(bucketName);
List<OSSObjectSummary> listDeletes = ObjectListing.getObjectSummaries();
for (int i = 0; i < listDeletes.size(); i++) {
String objectName = listDeletes.get(i).getKey();
System.out.println("objectName = " + objectName);
// 如果不为空,先删除bucket下的文件
client.deleteObject(bucketName, objectName);
}
client.deleteBucket(bucketName);
}


/**
* 把Bucket设置成所有人可读

* @param client
*            OSSClient对象
* @param bucketName
*            Bucket名
* @throws OSSException
* @throws ClientException
*/
private static void setBucketPublicReadable(OSSClient client,
String bucketName) throws OSSException, ClientException {
// 创建bucket
client.createBucket(bucketName);


// 设置bucket的访问权限, public-read-write权限
client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
}




/**
* 下载文件

* @param client
*            OSSClient对象
* @param bucketName
*            Bucket名
* @param Objectkey
*            上传到OSS起的名
* @param filename
*            文件下载到本地保存的路径
* @throws OSSException
* @throws ClientException
*/
private static void downloadFile(OSSClient client, String bucketName,
String Objectkey, String filename) throws OSSException,
ClientException {
client.getObject(new GetObjectRequest(bucketName, Objectkey), new File(
filename));
}

}

前端调用


---------------引入libjar包
《-----------------前端-------------》


<aos:window id="_w_deploy" title="上传图片">
<aos:formpanel id="_f_deploy" width="450" layout="column" labelWidth="70">
<aos:filefield name="pic_file" fieldLabel="图片" buttonText="选择图片" allowBlank="false" columnWidth="0.99"
emptyText="请选择图片文件..." />
</aos:formpanel>
<aos:docked dock="bottom" ui="footer">
<aos:dockeditem xtype="tbfill" />
<aos:dockeditem οnclick="_f_deploy_save" text="上传" icon="ok.png" />
<aos:dockeditem οnclick="#_w_deploy.hide();" text="关闭" icon="close.png" />
</aos:docked>
</aos:window>




//部署(注:文件上传操作不能使用AOS.Ajax()方法,只能使用Form自带的submit()函数)。
  function _f_deploy_save() {
      var form = _f_deploy.getForm();
      if (!form.isValid()) {
  return;
      }
      AOS.wait();
      form.submit({
  url: 'uploadPic.jhtml',
  success: function (form, action) {
      //_w_deploy.hide();
      AOS.
      AOS.hide();
     // AOS.tip();
      AOS.tip("上传完成");
      _g_proc_query();
  }
      });
  }




《-----------------上传图片action-------------》
/**
* 上传图片
* @param session
* @param request
* @return
* @throws IOException 
*/
@RequestMapping(value = "uploadPic")
public void uploadPic(
@RequestParam("pic_file") MultipartFile pic_file ,
HttpServletRequest request,HttpServletResponse response) throws IOException {


/*HttpServletRequest request= httpModel.getRequest();
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;  
MultipartFile myFile = multipartRequest.getFile("myFile"); */
Dto inDto = Dtos.newDto(request);
inDto.put("pic_file", pic_file);

Dto outDto = tbadvertservice.uploadPic(inDto,request);
WebCxt.write(response, AOSJson.toJson(outDto));
}
《-----------------上传图片service-------------》
/**
* 上传图片
* @param inDto
* @param request2 
* @return
* @throws IOException 
*/
public Dto uploadPic(Dto inDto, HttpServletRequest request) throws IOException {

Dto outDto = Dtos.newOutDto();


MultipartFile picFile= (MultipartFile) inDto.get("pic_file");
//判断图片格式
if (StringUtils.indexOf(picFile.getOriginalFilename(), ".jpg") == -1) {
outDto.setAppMsg("操作被取消,只能上传.jpg格式的图片。");
return outDto;
}
//图片存储到本地服务器
String path=request.getSession().getServletContext().getRealPath("/upload/");
//取后缀
   String suffix = picFile.getOriginalFilename().substring(picFile.getOriginalFilename().lastIndexOf("."));
   //存储到本地的图片名称
   String fileName =picFile.getOriginalFilename(); 
   
   //本地目的地址
   String destDir=path+"/"+fileName;
   File f=new File(path,fileName);
   picFile.transferTo(f);
            //"advert"+"/"   服务器路径
   String upImageToOSS = upImageToOSS("advert"+"/"+fileName, destDir);
System.out.println(upImageToOSS);


outDto.setAppMsg("上传图片成功。");

outDto.setStringA(upImageToOSS);
return outDto;
}


-------- 在需要调用的service里面定义如下方法
/**
* 图片上传本OSS
Objectkey:服务器路径
uploadFilePath:本地路径
*/
public String  upImageToOSS(String Objectkey,String uploadFilePath) {
/*String Objectkey = "head/f.jpg";


String uploadFilePath = "D:/w.jpg";*/
String bty = UploadFile.BTY(Objectkey, uploadFilePath);
return bty;
}


------------------调用UploadFile.java

可以使用阿里云提供的Java SDK来实现批量上传图片OSS。 首先,需要在项目中引入阿里云Java SDK的依赖,可以在Maven中添加以下依赖: ```xml <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency> ``` 接着,可以编写上传图片的代码。以下是一个基本的示例: ```java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.PutObjectRequest; import com.aliyun.oss.model.PutObjectResult; public class BatchUploadToOSS { public static void main(String[] args) { String endpoint = "your_endpoint"; // OSS服务端点 String accessKeyId = "your_access_key_id"; // AccessKeyId String accessKeySecret = "your_access_key_secret"; // AccessKeySecret String bucketName = "your_bucket_name"; // 存储空间名称 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); List<String> fileNames = new ArrayList<>(); // 需要上传的文件路径列表 fileNames.add("path/to/file1.jpg"); fileNames.add("path/to/file2.jpg"); fileNames.add("path/to/file3.jpg"); for (String fileName : fileNames) { File file = new File(fileName); InputStream inputStream; try { inputStream = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); continue; } PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, inputStream); PutObjectResult result = ossClient.putObject(putObjectRequest); System.out.println("上传文件 " + fileName + " 成功,文件URL:" + result.getETag()); } ossClient.shutdown(); } } ``` 以上代码会将指定目录下的多个文件批量上传到OSS,并输出每个文件的URL。需要将`your_endpoint`、`your_access_key_id`、`your_access_key_secret`和`your_bucket_name`替换为自己的实际信息。 注意,以上代码中的文件名需要包含文件扩展名。例如,如果需要上传的文件名为`image01`,那么应该将其改为`image01.jpg`或`image01.png`等带有文件扩展名的名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值