程序修改
修改 symphony.properties 文件
upload.local.dir=/mnt/upload/
修改 AudioMgmtService.java
public void removeAudioFile(final String audioURL) {
try {
LOGGER.log(Level.INFO, "Removing audio file [" + audioURL + "]");
if (Symphonys.QN_ENABLED) {
final Auth auth = Auth.create(Symphonys.UPLOAD_QINIU_AK, Symphonys.UPLOAD_QINIU_SK);
final BucketManager bucketManager = new BucketManager(auth, new Configuration());
final String fileKey = StringUtils.replace(audioURL, Symphonys.UPLOAD_QINIU_DOMAIN + "/", "");
bucketManager.delete(Symphonys.UPLOAD_QINIU_BUCKET, fileKey);
} else {
/**
* create by: qiankunpingtai
* create time: 2019/4/16 10:34
* website:https://qiankunpingtai.cn
* description:
* 修改本地文件通过绝对路径获取
* 在删除帖子的语音文件时,定位本地文件位置
*/
final String fileName = StringUtils.replace(audioURL, Latkes.getServePath() + "/mnt/upload", "");
final File file = new File(Symphonys.UPLOAD_LOCAL_DIR + fileName);
FileUtils.deleteQuietly(file);
}
LOGGER.log(Level.INFO, "Removed audio file [" + audioURL + "]");
} catch (final Exception e) {
if (e instanceof QiniuException) {
try {
LOGGER.log(Level.ERROR, "Removes audio failed [" + audioURL + "], Qiniu exception body [" +
((QiniuException) e).response.bodyString() + "]");
} catch (final Exception qe) {
LOGGER.log(Level.ERROR, "Removes audio and parse result exception", qe);
}
} else {
LOGGER.log(Level.ERROR, "Removes audio failed [" + audioURL + "]", e);
}
}
}
public String tts(final String text, final String type, final String textId, final String uid) {
final byte[] bytes = baiduTTS(text, uid);
if (null == bytes) {
return "";
}
String ret;
try {
if (Symphonys.QN_ENABLED) {
final Auth auth = Auth.create(Symphonys.UPLOAD_QINIU_AK, Symphonys.UPLOAD_QINIU_SK);
final UploadManager uploadManager = new UploadManager(new Configuration());
final BucketManager bucketManager = new BucketManager(auth, new Configuration());
final String fileKey = "audio/" + type + "/" + textId + ".mp3";
try {
bucketManager.delete(Symphonys.UPLOAD_QINIU_BUCKET, fileKey);
} catch (final Exception e) {
// ignore
}
uploadManager.put(bytes, fileKey, auth.uploadToken(Symphonys.UPLOAD_QINIU_BUCKET), null, "audio/mp3", false);
ret = Symphonys.UPLOAD_QINIU_DOMAIN + "/" + fileKey;
} else {
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + ".mp3";
fileName = FileUploadProcessor.genFilePath(fileName);
try (final OutputStream output = new FileOutputStream(Symphonys.UPLOAD_LOCAL_DIR + fileName)) {
IOUtils.write(bytes, output);
}
/**
* create by: qiankunpingtai
* create time: 2019/4/16 10:34
* website:https://qiankunpingtai.cn
* description:
* 修改本地文件通过绝对路径获取
* 处理语音文件,返回语音文件所在的路径
*/
ret = Latkes.getServePath() + "/mnt/upload/" + fileName;
}
return ret;
} catch (final Exception e) {
if (e instanceof QiniuException) {
try {
LOGGER.log(Level.ERROR, "Uploads audio failed [type=" + type + ", textId=" + textId + "], Qiniu exception body [" +
((QiniuException) e).response.bodyString() + "]");
} catch (final Exception qe) {
LOGGER.log(Level.ERROR, "Uploads audio and parse result exception", qe);
}
} else {
LOGGER.log(Level.ERROR, "Uploads audio failed [type=" + type + ", textId=" + textId + "]", e);
}
}
return "";
}
修改 UserMgmtService.java
if (Symphonys.QN_ENABLED) {
final Auth auth = Auth.create(Symphonys.UPLOAD_QINIU_AK, Symphonys.UPLOAD_QINIU_SK);
final UploadManager uploadManager = new UploadManager(new Configuration());
uploadManager.put(avatarData, "avatar/" + ret, auth.uploadToken(Symphonys.UPLOAD_QINIU_BUCKET),
null, "image/jpeg", false);
user.put(UserExt.USER_AVATAR_URL, Symphonys.UPLOAD_QINIU_DOMAIN + "/avatar/" + ret + "?" + new Date().getTime());
} else {
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + ".jpg";
fileName = FileUploadProcessor.genFilePath(fileName);
new File(Symphonys.UPLOAD_LOCAL_DIR + fileName).getParentFile().mkdirs();
try (final OutputStream output = new FileOutputStream(Symphonys.UPLOAD_LOCAL_DIR + fileName)) {
IOUtils.write(avatarData, output);
}
/**
* create by: qiankunpingtai
* create time: 2019/4/16 10:34
* website:https://qiankunpingtai.cn
* description:
* 修改本地文件通过绝对路径获取
* 头像图片URL地址获取,用户新增时写入userAvatarURL字段
*/
user.put(UserExt.USER_AVATAR_URL, Latkes.getServePath() + "/mnt/upload/" + fileName);
}
} catch (final IOException e) {
LOGGER.log(Level.ERROR, "Generates avatar error, using default thumbnail instead", e);
user.put(UserExt.USER_AVATAR_URL, AvatarQueryService.DEFAULT_AVATAR_URL);
}
修改 PostExportService.java
if (Symphonys.QN_ENABLED) {
final Auth auth = Auth.create(Symphonys.UPLOAD_QINIU_AK, Symphonys.UPLOAD_QINIU_SK);
final UploadManager uploadManager = new UploadManager(new Configuration());
uploadManager.put(zipData, fileKey, auth.uploadToken(Symphonys.UPLOAD_QINIU_BUCKET),
null, "application/zip", false);
return Symphonys.UPLOAD_QINIU_DOMAIN + "/" + fileKey;
} else {
fileKey = FileUploadProcessor.genFilePath(fileKey);
final String filePath = Symphonys.UPLOAD_LOCAL_DIR + fileKey;
FileUtils.copyFile(zipFile, new File(filePath));
/**
* create by: qiankunpingtai
* create time: 2019/4/16 10:34
* website:https://qiankunpingtai.cn
* description:
* 修改本地文件通过绝对路径获取
* 通过给定用户的id导出用户的所有帖子
*/
return Latkes.getServePath() + "/mnt/upload/" + fileKey;
}
} catch (final Exception e) {
LOGGER.log(Level.ERROR, "Uploading exprted data failed", e);
return null;
}
修改 FileUploadProcessor.java
if (QN_ENABLED) {
bytes = fileBytes.get(i);
final String contentType = file.getHeader().getContentType();
uploadManager.asyncPut(bytes, fileName, uploadToken, null, contentType, false, (key, r) -> {
LOGGER.log(Level.TRACE, "Uploaded [" + key + "], response [" + r.toString() + "]");
countDownLatch.countDown();
});
url = Symphonys.UPLOAD_QINIU_DOMAIN + "/" + fileName;
succMap.put(originalName, url);
} else {
final Path path = Paths.get(Symphonys.UPLOAD_LOCAL_DIR, fileName);
path.getParent().toFile().mkdirs();
try (final OutputStream output = new FileOutputStream(path.toFile());
final InputStream input = file.getFileInputStream()) {
IOUtils.copy(input, output);
countDownLatch.countDown();
}
/**
* create by: qiankunpingtai
* create time: 2019/4/16 10:34
* website:https://qiankunpingtai.cn
* description:
* 修改本地文件通过绝对路径获取
*/
url = Latkes.getServePath() + "/mnt/upload/" + fileName;
succMap.put(originalName, url);
}
} catch (final Exception e) {
LOGGER.log(Level.ERROR, "Uploads file failed", e);
errFiles.add(originalName);
}
修改 FetchUploadProcessor.java
if (Symphonys.QN_ENABLED) {
final Auth auth = Auth.create(Symphonys.UPLOAD_QINIU_AK, Symphonys.UPLOAD_QINIU_SK);
final UploadManager uploadManager = new UploadManager(new Configuration());
try {
uploadManager.put(bytes, "e/" + fileName, auth.uploadToken(Symphonys.UPLOAD_QINIU_BUCKET),
null, contentType, false);
} catch (final Exception e) {
LOGGER.log(Level.ERROR, "Uploads to Qiniu failed", e);
}
data.put(Common.URL, Symphonys.UPLOAD_QINIU_DOMAIN + "/e/" + fileName);
data.put("originalURL", originalURL);
} else {
fileName = FileUploadProcessor.genFilePath(fileName);
try (final OutputStream output = new FileOutputStream(Symphonys.UPLOAD_LOCAL_DIR + fileName)) {
IOUtils.write(bytes, output);
} catch (final Exception e) {
LOGGER.log(Level.ERROR, "Writes output stream failed", e);
}
/**
* create by: qiankunpingtai
* create time: 2019/4/16 10:34
* website:https://qiankunpingtai.cn
* description:
* 修改本地文件通过绝对路径获取
*/
data.put(Common.URL, Latkes.getServePath() + "/mnt/upload/" + fileName);
data.put("originalURL", originalURL);
}
修改 nginx 配置
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location /mnt/{
root /;
autoindex on;
}
location /symphony {
proxy_pass http://localhost:8080/symphony;
proxy_redirect default;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host:$server_port;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}