啥都不說 直接上代碼html
1.html:java
<form action="/bcis/api/headImgUpload.json" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="提交"> </form>
2.controller:web
@RequestMapping(value = "/headImgUpload.json", method = RequestMethod.POST) @ResponseBody public Map<String, Object> headImgUpload(HttpServletRequest request,MultipartFile file) { Map<String, Object> value = new HashMap<String, Object>(); value.put("success", true); value.put("errorCode", 0); value.put("errorMsg", ""); try { String head = userService.updateHead(file, 4);//此處是調用上傳服務接口,4是須要更新的userId 測試數據。 value.put("data", head); } catch (IOException e) { e.printStackTrace(); value.put("success", false); value.put("errorCode", 200); value.put("errorMsg", "圖片上傳失敗"); } return value; }
3.service 此處要把spring
@Autowired
private OSSClientUtil ossClient;注進來
@Override public String updateHead(MultipartFile file, long userId) throws IOException{ if (file == null || file.getSize() <= 0) { throw new ImgException("頭像不能爲空"); } String name = ossClient.uploadImg2Oss(file); String imgUrl = ossClient.getImgUrl(name); userDao.updateHead(userId, imgUrl);//只是本地上傳使用的 return imgUrl; }
4.上傳的阿里雲的幫助類OSSClientUtil apache
import java.io.*; import java.net.URL; import java.util.Date; import java.util.Random; import com.fndsoft.bcis.exception.ImgException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectResult; import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; /** * 阿里雲 OSS文件類 * * @author YuanDuDu */ public class OSSClientUtil { Log log = LogFactory.getLog(OSSClientUtil.class); // endpoint以杭州爲例,其它region請按實際狀況填寫 private String endpoint = "您的endpoint"; // accessKey private String accessKeyId = "您的accessKeyId"; private String accessKeySecret = "您的accessKeySecret"; //空間 private String bucketName = "bcis"; //文件存儲目錄 private String filedir = "data/"; private OSSClient ossClient; public OSSClientUtil() { ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); } /** * 初始化 */ public void init() { ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); } /** * 銷燬 */ public void destory() { ossClient.shutdown(); } /** * 上傳圖片 * * @param url */ public void uploadImg2Oss(String url) { File fileOnServer = new File(url); FileInputStream fin; try { fin = new FileInputStream(fileOnServer); String[] split = url.split("/"); this.uploadFile2OSS(fin, split[split.length - 1]); } catch (FileNotFoundException e) { throw new ImgException("圖片上傳失敗"); } } public String uploadImg2Oss(MultipartFile file) { if (file.getSize() > 1024 * 1024) { throw new ImgException("上傳圖片大小不能超過1M!"); } String originalFilename = file.getOriginalFilename(); String substring = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase(); Random random = new Random(); String name = random.nextInt(10000) + System.currentTimeMillis() + substring; try { InputStream inputStream = file.getInputStream(); this.uploadFile2OSS(inputStream, name); return name; } catch (Exception e) { throw new ImgException("圖片上傳失敗"); } } /** * 得到圖片路徑 * * @param fileUrl * @return */ public String getImgUrl(String fileUrl) { if (!StringUtils.isEmpty(fileUrl)) { String[] split = fileUrl.split("/"); return this.getUrl(this.filedir + split[split.length - 1]); } return null; } /** * 上傳到OSS服務器 若是同名文件會覆蓋服務器上的 * * @param instream 文件流 * @param fileName 文件名稱 包括後綴名 * @return 出錯返回"" ,惟一MD5數字簽名 */ public String uploadFile2OSS(InputStream instream, String fileName) { String ret = ""; try { //建立上傳Object的Metadata ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentLength(instream.available()); objectMetadata.setCacheControl("no-cache"); objectMetadata.setHeader("Pragma", "no-cache"); objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf(".")))); objectMetadata.setContentDisposition("inline;filename=" + fileName); //上傳文件 PutObjectResult putResult = ossClient.putObject(bucketName, filedir + fileName, instream, objectMetadata); ret = putResult.getETag(); } catch (IOException e) { log.error(e.getMessage(), e); } finally { try { if (instream != null) { instream.close(); } } catch (IOException e) { e.printStackTrace(); } } return ret; } /** * Description: 判斷OSS服務文件上傳時文件的contentType * * @param FilenameExtension 文件後綴 * @return String */ public static String getcontentType(String FilenameExtension) { if (FilenameExtension.equalsIgnoreCase(".bmp")) { return "image/bmp"; } if (FilenameExtension.equalsIgnoreCase(".gif")) { return "image/gif"; } if (FilenameExtension.equalsIgnoreCase(".jpeg") || FilenameExtension.equalsIgnoreCase(".jpg") || FilenameExtension.equalsIgnoreCase(".png")) { return "image/jpeg"; } if (FilenameExtension.equalsIgnoreCase(".html")) { return "text/html"; } if (FilenameExtension.equalsIgnoreCase(".txt")) { return "text/plain"; } if (FilenameExtension.equalsIgnoreCase(".vsd")) { return "application/vnd.visio"; } if (FilenameExtension.equalsIgnoreCase(".pptx") || FilenameExtension.equalsIgnoreCase(".ppt")) { return "application/vnd.ms-powerpoint"; } if (FilenameExtension.equalsIgnoreCase(".docx") || FilenameExtension.equalsIgnoreCase(".doc")) { return "application/msword"; } if (FilenameExtension.equalsIgnoreCase(".xml")) { return "text/xml"; } return "image/jpeg"; } /** * 得到url連接 * * @param key * @return */ public String getUrl(String key) { // 設置URL過時時間爲10年 3600l* 1000*24*365*10 Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10); // 生成URL URL url = ossClient.generatePresignedUrl(bucketName, key, expiration); if (url != null) { return url.toString(); } return null; } }
6.須要引入的jar包:gradle配置爲:json
compile 'com.aliyun.oss:aliyun-sdk-oss:2.2.3'