OSS不支持通過一個網絡地址來上傳圖片,所以若想將網絡上的圖片上傳到OSS上需要走點彎路。
1:通過鏈接將圖片下載到本地的一個文件夾下面
2:用OSS上傳該文件夾下的文件
3:上傳完成後刪除本地的文件
具體代碼如下:
//獲取當前項目的絕對路徑
public static String getTomcatPath(){
String nowpath;
String tempdir;
nowpath=System.getProperty("user.dir");
tempdir=nowpath.replace("bin", ""); //把bin 文件夾變到 webapps文件裏面
return tempdir;
}
/**
* 將圖片下載下來後,上傳到OSS
* @param imgLink
* @param downloadPath
* @return
* @throws Exception
*/
private String downloadImagAndUploadToOss(String imgLink,String downloadPath) throws Exception{
List<String> urlList=new ArrayList<String>();
urlList.add(imgLink);
String imgName=DateUtil.formatDate(new Date(), "yyyyMMddhhmmss")+UuidUtil.createUUID()+".jpg";
downloadPicture(urlList,downloadPath,imgName);
String key="carAlbum/"+imgName;
String imgUrl=OSSObjectAPI.genOssPicUrl(OSSObjectAPI.XI_AN_BUCKET_NAME,OSSObjectAPI.XIAN_ACCESS_ID,OSSObjectAPI.XIAN_ACCESS_KEY,
"http://oss-cn-zhangjiakou.aliyuncs.com/",downloadPath+imgName,key);
FileUtil.delete(downloadPath+imgName);
return imgUrl;
}
/**
* 傳入要下載的圖片的url列表,將url所對應的圖片下載到本地
* @param urlList
* @throws Exception
*/
private void downloadPicture(List<String> urlList,String path,String imgName) throws Exception {
if(urlList==null||urlList.size()==0){
return;
}
URL url = null;
FileOutputStream fileOutputStream =null;
InputStream inputStream =null;
for (String urlString : urlList) {
try {
url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.addRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0");
connection.setConnectTimeout(10 * 1000);
connection.setReadTimeout(15 * 1000);
inputStream = connection.getInputStream();
byte[] buffer = new byte[1024];
int length;
fileOutputStream= new FileOutputStream(path+ File.separator+ imgName);
while ((length = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, length);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
inputStream.close();
fileOutputStream.flush();
fileOutputStream.close();
}
}
}