package me.jcala.blog.service;
import lombok.extern.slf4j.Slf4j;
import me.jcala.blog.domain.Info;
import me.jcala.blog.domain.SystemSetting;
import me.jcala.blog.domain.UploadPic;
import me.jcala.blog.service.inter.FileUploadSer;
import me.jcala.blog.service.inter.InfoSer;
import me.jcala.blog.utils.FileTools;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
@Slf4j
@Service
public class FileUploadSerImpl implements FileUploadSer{
private InfoSer infoSer;
private SystemSetting setting;
@Autowired
public FileUploadSerImpl(InfoSer infoSer, SystemSetting setting){
this.infoSer = infoSer;
this.setting = setting;
}
@Override
public UploadPic uploadPic(HttpServletRequest request){
String picUrl="";
try {
picUrl=FileTools.updatePic("/pic/",setting.getPicHome(),request);
} catch (Exception e) {
log.warn("上传图片时发生错误:"+e.getLocalizedMessage());
}
final UploadPic upload = new UploadPic();
if ("".equals(picUrl)){
upload.setSuccess(0);
upload.setMessage("Upload picture fail!");
upload.setUrl("");
return upload;
}
upload.setSuccess(1);
upload.setMessage("Upload picture success!");
upload.setUrl(picUrl);
return upload;
}
@Override
@Transactional(isolation = Isolation.READ_COMMITTED)
public Info updateAvatar(HttpServletRequest request){
String url=uploadPic(request).getUrl();
if (!"".equals(url)){
infoSer.updateAvatar(url);
}
return infoSer.getInfo();
}
@Override
public ResponseEntity<byte[]> gainPic(String dir, String picName){
File file=new File(setting.getPicHome()+File.separatorChar+dir+File.separatorChar+picName);
byte[] bytes;
try {
bytes= FileTools.readFileToByteArray(file);
} catch (Exception e) {
log.warn(e.getLocalizedMessage());
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", picName);
return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
}
}