页面写法:
<div class="col-md-12">
<label class="control-label col-md-2 col-md-offset-3">选择图片</label><br>
<div class="fileinput fileinput-new col-md-offset-3"
<div id="imageContent" class="thumbnail"
<img id="imgShow" src="${cardPrivilege.fileUrl}" alt="图片">
</div>
<div id="headUpload">
<input id="imageIdStr" name="imageIdStr" type="hidden"
</span>
</div>
</div>
</div>
js 写法:
uploadAvatar = function(){
if($.trim($("#headPic").val())==""){
$("#avatarFileId").val("");
return;
}
$("#deletePic").hide();
$("#selectPic").hide();
$("#modifyPic").hide();
$("#loadingImg").show();
$.ajaxFileUpload({
url: '/oss/uploadCmsAvatar.do',
fileElementId: 'headPic',
dataType: 'json',
success: function (callbackData) {
if(callbackData.retcode==0&&callbackData.errcode==0){
$("#imageIdStr").val(callbackData.data.fileUrl);
$("#fileId").val(callbackData.data.fileId);
alert(callbackData.data.fileUrl);
$("#imgShow").attr("src",callbackData.data.fileUrl);
$("#exisImage").show();
$("#nonImage").hide();
$("#deletePic").show();
$("#selectPic").hide();
$("#modifyPic").show();
}
else {
alert(callbackData.message);
}
$("#loadingImg").hide();
},
error:function (callbackData){
$("#loadingImg").hide();
alert("上传照片异常");
}
});
};
cms 的control写法:
@Controller
@RequestMapping("/oss")
@Scope("prototype")
public class OssImageController extends BaseController {
@Autowired
OssImageService ossImageService;
/**
* 上传后台用户头像
* @param request
* @param cmsRole
* @return
*/
@RequestMapping(value="/uploadCmsAvatar",method = RequestMethod.POST)
@ResponseBody
public ResultObject uploadCmsAvatar(HttpServletRequest request,@RequestParam(value = "headPic", required = false)MultipartFile file){
ResultObject resultObject = new ResultObject();
try {
resultObject = ossImageService.UploadCmsAvatar(file);
} catch (Exception e) {
resultObject.setRetcode(9999);
resultObject.setErrcode(9999);
resultObject.setMessage("上传图片失败.");
LogWriter.writeErrorLog("上传图片失败", e);
}
return resultObject;
}
}
cms的service写法:
/**
* cms头像上传
* @return
* @throws Exception
*/
public ResultObject UploadCmsAvatar(MultipartFile file) throws Exception{
return resultObject = UploadImage(file,OssImageEnum.CMS_AVATAR);
}
/**
* 通用图片上传
* @return
*/
public ResultObject UploadImage(MultipartFile file,OssImageEnum ossImageEnum) throws Exception{
String loginName = LoginCookieHandle.getLoginUser().getUserName();
String fileBase64 = new BASE64Encoder().encode(file.getBytes());
String fileName = file.getOriginalFilename();
//业务参数
apiDataParamJson.put("loginName", loginName);
apiDataParamJson.put("fileName", fileName);
apiDataParamJson.put("key", ossImageEnum);
//请求参数
apiParamMap.put("partner", partner);
apiParamMap.put("data", URLEncoder.encode(apiDataParamJson.toJSONString(), "utf-8"));
apiParamMap.put("sign", createSign(apiDataParamJson.toJSONString()));
//请求api
apiResultString = HttpRequestUtil.postFile(“http://localhost:8080/api/oss/uploadImage.do
//验证api返回结果
if(ValidateUtil.stringNullOrEmpty(apiResultString)==true){
resultObject.setRetcode(1);
resultObject.setErrcode(1);
resultObject.setMessage("未得到服务中心应答");
return resultObject;
}
//反向解析服务器内容
OssImageResult ossImageResult = JSONObject.parseObject(apiResultString,OssImageResult.class);
//api返回结果验证
if(ossImageResult.getRetcode()!=0||ossImageResult.getErrcode()!=0){
resultObject.setRetcode(ossImageResult.getRetcode());
resultObject.setErrcode(ossImageResult.getErrcode());
resultObject.setMessage(ossImageResult.getMessage());
return resultObject;
}
resultObject.setRetcode(0);
resultObject.setErrcode(0);
resultObject.setMessage("图片上传成功");
resultObject.setData(ossImageResult.getData());
return resultObject;
}
api的controller:
@Controller
@RequestMapping("/api/oss")
@Scope("prototype")
public class ImageController extends BaseAPIController {
@Autowired
ImageService imageService;
@RequestMapping(value = "/uploadImage")
@ResponseBody
public ResultObject uploadImage(InputObject inputObject, String fileBase64) {
try {
execute(inputObject);
if (resultObject.getErrcode() != ApiResponseConstant.API_RESQUEST_SUCCESS) {
return resultObject;
}
resultObject = imageService.upload(inputObject, fileBase64);
} catch (Exception e) {
LogWriter.writeErrorLog("上传图片失败,原因:", e);
resultObject.setRetcode(ApiResponseConstant.API_RESQUEST_FAIL);
resultObject.setErrcode(ApiResponseConstant.API_UNKNOWN);
resultObject.setMessage(CmsConstant.MENU_FAILED);
}
return resultObject;
}
}
api的service:
/**
* 图片上传
* @param 图片内容file
* @param 存储文件夹key
* @param 返回结果resultObject
* @return
* @throws Exception
*/
@SuppressWarnings("restriction")
public ResultObject upload(InputObject inputObject,String fileBase64) throws Exception{
try {
String dataStr = inputObject.getData();
//参数不能为空
if (CommonUtil.validateStringIsNullOrEmpty(dataStr, true)) {
resultObject.setRetcode(ApiResponseConstant.API_RESQUEST_SUCCESS);
resultObject.setErrcode(ApiResponseConstant.API_PARAM_NOT_NULL);
resultObject.setMessage(ApiResponseConstant.MESSAGE_API_PARAM_NOT_NULL);
return resultObject;
}
//获取传输参数
JSONObject json = JSONObject.parseObject(inputObject.getData());
String sourceFileName = json.getString("fileName");
String key = AliYunConfig.getImageKey(json.getObject("key", OssImageEnum.class));
byte[] bFile = new BASE64Decoder().decodeBuffer(fileBase64);
resultObject = upload(bFile,sourceFileName,key);
} catch (Exception e) {
LogWriter.writeErrorLog(String.format("上传失败,原因:%s", e.getMessage()));
//上传图片失败
resultObject.setRetcode(ApiResponseConstant.API_RESQUEST_FAIL);
resultObject.setErrcode(ApiResponseConstant.API_UNKNOWN);
resultObject.setMessage(SecurityConstant.UPLOAD_FAIL);
}
return resultObject;
}
/**
* 图片上传
* @param 图片内容file
* @param 存储文件夹key
* @param 返回结果resultObject
* @return
*/
public ResultObject upload(byte[] bFile, String sourceFileName, String key){
InputStream inputStream = new ByteArrayInputStream(bFile);
try {
//得到图片序列
String extendName = FileUtil.getExtendName(sourceFileName);//文件扩展名
String extendNameNoDot = FileUtil.getExtendNameNoDot(sourceFileName); //得到文件ID
//向数据库中保存图片相关信息
Long fileId=saveFileContent(extendNameNoDot, key, sourceFileName);
//以上上传成功后保存到文件内容表
if(fileId.longValue() <=0){
//保存图片文件到表中失败
resultObject.setRetcode(ApiResponseConstant.API_RESQUEST_SUCCESS);
resultObject.setErrcode(SecurityConstant.SAVE_FAIL_CODE);
resultObject.setMessage(SecurityConstant.SAVE_FAIL);
return resultObject;
}
//上传到阿里云时候的图片名称及图片存储路径
String aliyunFileName = fileId+extendName;
String aliUrl = key+aliyunFileName; //获得头像在阿里云图片存储路径
//将图片上传到阿里云
if(OSSUploadObjUtil.uploadFile(AliYunConfig.getBucketName(), aliUrl, inputStream)==false){
//上传图片失败
resultObject.setRetcode(ApiResponseConstant.API_RESQUEST_SUCCESS);
resultObject.setErrcode(SecurityConstant.UPLOAD_FAIL_CODE);
resultObject.setMessage(SecurityConstant.UPLOAD_FAIL);
return resultObject;
}
OssImageDataResult ossImageDataResult = new OssImageDataResult();
ossImageDataResult.setFileId(fileId.toString());
ossImageDataResult.setFileUrl(AliYunConfig.getImageHost()+aliUrl);
resultObject.setRetcode(ApiResponseConstant.API_RESQUEST_SUCCESS);
resultObject.setRetcode(ApiResponseConstant.API_RESQUEST_SUCCESS);
resultObject.setMessage(OssConstant.IMG_UPLOAD_SUCCESS);
resultObject.setData(ossImageDataResult);
} catch (Exception e) {
LogWriter.writeErrorLog(String.format("上传失败,原因:%s", e.getMessage()));
e.printStackTrace();
//上传图片失败
resultObject.setRetcode(ApiResponseConstant.API_RESQUEST_FAIL);
resultObject.setErrcode(ApiResponseConstant.API_UNKNOWN);
resultObject.setMessage(SecurityConstant.UPLOAD_FAIL);
return resultObject;
} finally{
try {
if(inputStream!=null){
inputStream.close();
}
} catch (IOException e) {
LogWriter.writeErrorLog(String.format("上传失败,原因:%s", e.getMessage()));
//上传图片失败
resultObject.setRetcode(ApiResponseConstant.API_RESQUEST_FAIL);
resultObject.setErrcode(ApiResponseConstant.API_UNKNOWN);
resultObject.setMessage(SecurityConstant.UPLOAD_FAIL);
return resultObject;
}
}
return resultObject;
}
/**
* 保存上传的文件相关信息
* @param fileId : 文件编号
* @param extendName : 扩展名
* @param filePath : 不含主机头的路径
* @return
*/
public Long saveFileContent(String extendName,String filePath,String fileName){
Long fileId=0L;
try {
OssFile file = new OssFile();
file.setOssFileId(fileId);
file.setFileName(fileName);
file.setExtendName(extendName);
file.setFilePath(filePath);
file.setCreateTime(new Date());
file.setUpdateTime(new Date());
if(ossFileDao.insertSelective(file)>0){
fileId=file.getOssFileId();
}
} catch (Exception e) {
LogWriter.writeErrorLog("保存上传图片信息异常========>"+e);
}
return fileId;
}
import com.aliyun.oss.OSSClient;
import com.ds.tech.utility.common.ConfigUtil;
import com.ds.tech.utility.log4j.LogWriter;
import java.io.InputStream;
/**
* 上传阿里云oss服务
* @author Administrator
*
*/
public class OSSUploadObjUtil {
private static OSSClient client = null;
static {
String accessId = ConfigUtil.getSettings("access_id");
String accessSecret = ConfigUtil.getSettings("access_secret");
String endpoint = ConfigUtil.getSettings("endpoint");
client = new OSSClient(endpoint, accessId, accessSecret);
}
/**
* 通过文件流上传文件
* @param bucketName
* @param saveFilePath
* @param input
* @return
*/
public static boolean uploadFile(String bucketName, String key,InputStream inputStream){
try {
client.putObject(bucketName, key, inputStream);
return true;
} catch (Exception e) {
e.printStackTrace();
LogWriter.writeErrorLog(e);
}
return false;
}
}
实体:
public class OssImageDataResult implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String fileId;
private String fileUrl;
public String getFileId() {
return fileId;
}
public void setFileId(String fileId) {
this.fileId = fileId;
}
public String getFileUrl() {
return fileUrl;
}
public void setFileUrl(String fileUrl) {
this.fileUrl = fileUrl;
}
}