上传主方法
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