七牛云--图片上传回显

控制层

	@RequestMapping(value = "/uploadProductImage", method = { RequestMethod.POST })
	@ResponseBody
	public JSONObject uploadHeadImage(@RequestParam("file") MultipartFile file)
			throws IOException {
		Assert.notNull(file, "上传文件不能为空");
		JSONObject json = new JSONObject();
		try {
			boolean flag = file.isEmpty();
			if (!flag) {
				String name=System.currentTimeMillis()+file.getOriginalFilename();//System.currentTimeMillis()根据系统时间产生随机数
				PhotoUtil mUtil=new  PhotoUtil();
				String resInfo = mUtil.upload(file, name);//得到回显URL地址
				json.put("msg","上传成功");
				json.put("errorCode",ErrorCodeContents.SUCCESS_CODE);
				json.put("src",resInfo);
			} else {
				json.put("msg","上传失败");
				json.put("errorCode",ErrorCodeContents.FAILUE_CODE);
			}
		}catch(Exception E){
			E.printStackTrace();
		}
		return json;
	}

工具类

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.lang.RandomStringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import com.qiniu.util.StringUtils;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.ResponseBody;

@Component
public class PhotoUtil {

@Autowired
private static CacheUtil cacheUtil;


/** 
 * @Title:PhotoUtil
 * @Description:项目启动时注入cacheUtil
 * @param cacheUtil 
 */
@Autowired
public PhotoUtil(CacheUtil cacheUtil){
	PhotoUtil.cacheUtil = cacheUtil;
	//System.out.println(getLocalRestUrlFromCache());
}

//设置好账号的ACCESS_KEY和SECRET_KEY
public String ACCESS_KEY ; //这两个登录七牛 账号里面可以找到
public String SECRET_KEY ; 

//要上传的空间
public String BUCKET_NAME; //对应要上传到七牛上 你的那个路径(自己建文件夹 注意设置私有)


/**
 * @fieldName: HOST_NAME
 * @fieldType: String
 * @Description: 七牛云域名
 */
public String HOST_NAME;

//密钥配置
public Auth auth ;
//创建上传对象
public UploadManager uploadManager = new UploadManager();



/** 
 * @Title:PhotoUtil
 * @Description:构造函数初始化
 */
public PhotoUtil() {
	this.ACCESS_KEY = cacheUtil.getObjectValueFormCache("qiniu.properties+ACCESS_KEY");
	this.SECRET_KEY = cacheUtil.getObjectValueFormCache("qiniu.properties+SECRET_KEY");
	this.BUCKET_NAME = cacheUtil.getObjectValueFormCache("qiniu.properties+BUCKET_NAME");
	this.HOST_NAME = cacheUtil.getObjectValueFormCache("qiniu.properties+HOST_NAME");
	auth = Auth.create(ACCESS_KEY, SECRET_KEY);
}

/**
 * 简单上传,使用默认策略,只需要设置上传的空间名就可以了
 *
 * @param fileName 文件上传至七牛云空间的名称
 * @return
 */
public String getUpToken(String fileName) {
	//return auth.uploadToken(bucketname);
	//<bucket>:<key>,表示只允许用户上传指定key的文件。在这种格式下文件默认允许“修改”,已存在同名资源则会被本次覆盖。
	//如果希望只能上传指定key的文件,并且不允许修改,那么可以将下面的 insertOnly 属性值设为 1。
	//第三个参数是token的过期时间
	return auth.uploadToken(BUCKET_NAME, fileName, 3600, new StringMap().put("insertOnly", 1));
}




/** 
 * @Title: upload 
 * @Description: 文件上传
 * @param filePath 文件路径
 * @param fileName 文件名
 * @return targetUrl 七牛云中访问的url
 */
public String upload(String filePath, String fileName) {
	try {
		//调用put方法上传
		Response res = uploadManager.put(filePath, fileName, getUpToken(fileName));
		//打印返回的信息
		System.out.println(res.bodyString());
	} catch (QiniuException e) {
		Response r = e.response;
		// 请求失败时打印的异常的信息
		System.out.println(r.toString());
		try {
			//响应的文本信息
			System.out.println(r.bodyString());
		} catch (QiniuException e1) {
			//ignore
			e.printStackTrace();
		}
	}
	return HOST_NAME+fileName;
}


//	/**
//	 * 获取下载文件路径,即:donwloadUrl
//	 *
//	 * @return
//	 */
//	public String getDownloadUrl(String targetUrl) {
//		String downloadUrl = auth.privateDownloadUrl(targetUrl);
//		return downloadUrl;
//	}


//	/**
//	 * 文件下载
//	 *
//	 * @param targetUrl
//	 */
//	public void download(String targetUrl) {
//		//获取downloadUrl
//		String downloadUrl = getDownloadUrl(targetUrl);
//		//本地保存路径
//		String filePath = "E:\\chen\\";
//		download(downloadUrl, filePath);
//	}


//	/**
//	 * 通过发送http get 请求获取文件资源
//	 *
//	 * @param url
//	 * @param filepath
//	 * @return
//	 */
//	private static void download(String url, String filepath) {
//		OkHttpClient client = new OkHttpClient();
//		System.out.println(url);
//		Request req = new Request.Builder().url(url).build();
//		com.squareup.okhttp.Response resp = null;
//		try {
//			resp = client.newCall(req).execute();
//			System.out.println(resp.isSuccessful());
//			if (resp.isSuccessful()) {
//				ResponseBody body = resp.body();
//				InputStream is = body.byteStream();
//				byte[] data = readInputStream(is);
//				//判断文件夹是否存在,不存在则创建
//				File file = new File(filepath);
//				if (!file.exists() && !file.isDirectory()) {
//					System.out.println("===文件夹不存在===创建====");
//					file.mkdir();
//				}
//				File imgFile = new File(filepath + "888.jpg");
//				FileOutputStream fops = new FileOutputStream(imgFile);
//				fops.write(data);
//				fops.close();
//			}
//		} catch (IOException e) {
//			e.printStackTrace();
//			System.out.println("Unexpected code " + resp);
//		}
//	}

/**
 * 读取字节输入流内容
 *
 * @param is
 * @return
 */
public byte[] readInputStream(InputStream is) {
	ByteArrayOutputStream writer = new ByteArrayOutputStream();
	byte[] buff = new byte[1024 * 2];
	int len = 0;
	try {
		while ((len = is.read(buff)) != -1) {
			writer.write(buff, 0, len);
		}
		is.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
	return writer.toByteArray();
}

private byte[] getBytesWithMultipartFile(MultipartFile multipartFile) {
    try {
        return multipartFile.getBytes();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}


public String upload(MultipartFile multipartFile, String fileName) {
	byte[] bytes = getBytesWithMultipartFile(multipartFile);
	String timeStamp = DateUtil.getCurrentTime("yyyyMMddHHmmssSSS");
	//fileName = timeStamp+fileName.substring(0, fileName.indexOf('.')); 
	try {
		//调用put方法上传
		//Response res = uploadManager.put(filePath, fileName, getUpToken(fileName));
		
		Response res = uploadManager.put(bytes, timeStamp, getUpToken(timeStamp));
		//打印返回的信息
		System.out.println(res.bodyString());
	} catch (QiniuException e) {
		Response r = e.response;
		// 请求失败时打印的异常的信息
		System.out.println(r.toString());
		try {
			//响应的文本信息
			System.out.println(r.bodyString());
		} catch (QiniuException e1) {
			//ignore
			e.printStackTrace();
		}
	}
	return HOST_NAME+timeStamp;
}
    
//	public static void main(String args[]) throws IOException {
//		String fileName = "dog.jpg";
//		//上传文件的路径
//		String FilePath = "C:\\Users\\lenovo\\Desktop\\123456.jpg";  //本地要上传文件路径
//		//new PhotoUtil().upload(FilePath,fileName);
//
//		//构造私有空间的需要生成的下载的链接;
//		//格式: http://pi4uvypps.bkt.clouddn.com/dog.jpg
//		//String targetUrl = "http://私有空间绑定的域名/下载文件名称.后缀";
//		//new PhotoUtil().download(targetUrl);
//	}
}

前端js

  upload.render({
    elem: '#img'
    ,method:'post'
    ,url: basePath+'product/uploadProductImage'    
    ,done: function(res){
      //如果上传失败
      if(res.errorCode!="10000"){
        return layer.msg('上传失败');
      }else{
    	  var src = res.src;
        $('.upload-img').html('<img class="layui-upload-img" style="width:100%;height:100%" src="'+res.src+'" id="demo1">');
        $('.layui-btn-img').text("重新上传");  
        $("#productImg").val(res.src);
        return layer.msg('上传成功',{time:700});
      }
    }
  }); 

jsp

<div class="layui-form-item">
     			 <label class="layui-form-label">宣传图片<label style="color:red">*</label></label>
      			 <div class="layui-upload">
      				<div class="layui-upload-list">
      					<div class="upload-img"  style="width:100%">
<!--       					<img class="layui-upload-img" style="width:100%;height:100%" src="uploadImg/骷髅.jpg" id="demo1"> -->
      					</div>
						<button type="button" class="layui-btn btn layui-btn-img" id="img" style="margin-left: 20%;">上传图片</button>
        			</div> 
    			</div>
    		</div>
### 七牛云直接图片而不需上传 HTML 页面集成 为了实现在网页中通过七牛云直接示照片而无需上传的功能,可以利用七牛云提供的公开访问链接特性。以下是具体实现方法: #### 使用公开访问链接 当一张图片已经存在于七牛云的对象存储中,并且该资源被设置为公有访问权限时,可以直接通过其外链 URL 访问并嵌入到 HTML 中[^1]。例如,在 `<img>` 标签中指定 `src` 属性即可加载图片。 ```html <img src="https://your-bucket-domain/image.jpg" alt="Example Image"> ``` 上述代码中的 `https://your-bucket-domain/image.jpg` 是七牛云的文件外链地址,其中 `your-bucket-domain` 替换为你实际的空间域名,`image.jpg` 则是你存储在七牛云上的图片名称[^4]。 #### 设置对象存储空间为公共读取模式 要使图片能够被直接访问,需要确保对应的存储空间已配置为 **公共读取** 权限。可以通过七牛管理控制台进入对应存储空间,调整权限设置完成这一操作[^5]。 #### 动态生成图片路径 如果希望动态生成图片路径,则可以在后端逻辑中拼接完整的 URL 并传回前端渲染。比如基于 Spring Boot 的项目中,定义接口返图片列表及其完整外链地址: ```java @RestController @RequestMapping("/images") public class ImageController { @Value("${qiniu.bucket.domain}") private String bucketDomain; @GetMapping public List<String> getImages() { List<String> imageUrls = Arrays.asList( "https://" + bucketDomain + "/image1.jpg", "https://" + bucketDomain + "/image2.jpg" ); return imageUrls; } } ``` 以上代码片段展示了如何构建一个简单的 RESTful API 接口用于提供图片外链集合。 #### 前端展示图片 从前端角度来看,只需要接收来自服务端的数据并将这些 URL 插入至 DOM 结构之中便可轻松达成目标。下面给出一段 Vue.js 示例代码说明这一点: ```javascript <template> <div id="app"> <ul> <li v-for="(url, index) in images" :key="index"> <img :src="url" /> </li> </ul> </div> </template> <script> export default { data() { return { images: [], }; }, created() { fetch('/api/images') .then((response) => response.json()) .then((data) => (this.images = data)); }, }; </script> ``` 此段脚本实现了从 `/api/images` 获取远程图片数组之后自动填充页面内的所有图像元素。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值