<%@ page import="wt.query.QuerySpec" %>
<%@ page import="wt.query.SearchCondition" %>
<%@ page import="wt.fc.*" %>
<%@ page import="com.pisx.pmgt.project.PIProject" %>
<%@ page import="java.util.*" %>
<%@ page import="wt.util.WTException" %>
<%@ page import="wt.inf.container.WTContainer" %>
<%@ page import="org.apache.commons.lang3.StringUtils" %>
<%@ page import="wt.folder.FolderHelper" %>
<%@ page import="wt.inf.container.WTContainerRef" %>
<%@ page import="wt.folder.Folder" %>
<%@ page import="wt.folder.SubFolder" %>
<%@ page import="wt.doc.WTDocument" %>
<%@ page import="wt.doc.DocumentType" %>
<%@ page import="wt.folder.FolderEntry" %>
<%@ page import="wt.pom.Transaction" %>
<%@ page import="org.apache.commons.httpclient.methods.GetMethod" %>
<%@ page import="org.apache.commons.httpclient.HttpClient" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.ByteArrayInputStream" %>
<%@ page import="org.apache.commons.httpclient.Header" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.net.URLDecoder" %>
<%@ page import="wt.vc.Versioned" %>
<%@ page import="wt.vc.VersionControlHelper" %>
<%@ page import="wt.pds.StatementSpec" %>
<%@ page import="com.ptc.windchill.enterprise.doc.forms.CreateDocFormProcessor" %>
<%@ page import="ext.pi.core.PIContentHelper" %>
<%@ page import="java.beans.PropertyVetoException" %>
<%@ page import="wt.content.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<style>
</style>
<html>
<head>
<meta charset="utf-8">
<title>测试</title>
</head>
<body>
欢迎来到JSP!<br/>
<form name = "transform" method="post">
<label>
<input type="text" name="projectNumber" placeholder="输入项目编号">
</label>
<label>
<input type="text" name="minioPath" placeholder="输入下载目录">
</label>
<label>
<input type="text" name="dFileName" placeholder="输入下载文件名">
</label>
<input type="button" value="执行" onclick="function sel() {
document.transform.submit();
}
sel()">
</form>
<%!
private int initVar = 0;
private int serviceVar = 0;
private int destroyVar = 0;
private String userEmail = "";
%>
<%!
@Override
public void jspInit() {
initVar++;
System.out.println("jspInit(): JSP被初始化了"+initVar+"次");
}
@Override
public void jspDestroy() {
destroyVar++;
System.out.println("jspDestroy(): JSP被销毁了"+destroyVar+"次");
}
private static QueryResult getProjectQR(Object projectId) throws WTException {
QuerySpec qs = new QuerySpec(PIProject.class);
qs.setAdvancedQueryEnabled(true);
int[] ai = new int[] { 0, 1 };
SearchCondition searchCondition = new SearchCondition(PIProject.class, "projectShortName", SearchCondition.EQUAL, projectId.toString());
qs.appendWhere(searchCondition, ai);
QueryResult qr = PersistenceHelper.manager.find(qs);
return qr;
}
private static byte[] getFileByMinIO() throws Exception {
GetMethod getMethod = new GetMethod("http://127.0.0.1:8080/test/download?path=plm/T0001/&fileName=test01.txt");
HttpClient httpClient = new HttpClient();
int i = httpClient.executeMethod(getMethod);
Header responseHeader = getMethod.getResponseHeader("Content-Disposition");
InputStream responseBodyAsStream = getMethod.getResponseBodyAsStream();
byte[] responseBody = getMethod.getResponseBody();
return responseBody;
}
/**
* Delete primary content to document
*
* @param doc
* @throws WTException
* @throws PropertyVetoException
*/
public static void deletePrimaryContent(WTDocument doc) throws WTException, PropertyVetoException {
ContentHolder contentHolder = ContentHelper.service.getContents(doc);
ApplicationData applicationdataPrimary = (ApplicationData) ContentHelper
.getPrimary((FormatContentHolder) contentHolder);
if (applicationdataPrimary != null) {
ContentServerHelper.service.deleteContent(contentHolder, applicationdataPrimary);
contentHolder = (ContentHolder) PersistenceHelper.manager.refresh(contentHolder);
}
}
public static boolean isLatestVersion(Versioned v) {
try {
// 此方法查询对象的所有版本,按照从新到旧的顺序排列,只取出第一个来比较
QueryResult qr = VersionControlHelper.service.allVersionsOf(v);
if (qr.hasMoreElements()) {
Versioned latestVersion = (Versioned) qr.nextElement();
String lv1 = latestVersion.getVersionIdentifier().getValue();// 查询大版本号
String lv2 = latestVersion.getIterationInfo().getIdentifier().getValue();// 查询小版本号
String v1 = v.getVersionIdentifier().getValue();
String v2 = v.getIterationInfo().getIdentifier().getValue();
if (lv1.equals(v1) && lv2.equals(v2)) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private static Map<String, WTDocument> getProjectAllDoc(String projectNumber) throws Exception{
Map<String,WTDocument> result = new HashMap<>();
QuerySpec qs = new QuerySpec();
qs.setAdvancedQueryEnabled(true);
int wIndex = qs.appendClassList(WTDocument.class, true);
int pIndex = qs.appendClassList(PIProject.class, false);
SearchCondition sc = new SearchCondition(
WTDocument.class, "containerReference.key.classname",
SearchCondition.EQUAL, "com.pisx.pmgt.project.PIProjectContainer");
qs.appendWhere(sc, new int[]{wIndex});
qs.appendAnd();
sc = new SearchCondition(WTDocument.class, "containerReference.key.id", PIProject.class, "containerReference.key.id");
qs.appendWhere(sc, new int[]{wIndex, pIndex});
qs.appendAnd();
sc = new SearchCondition(
PIProject.class, "projectShortName", SearchCondition.EQUAL, projectNumber);
qs.appendWhere(sc, new int[]{pIndex});
QueryResult qr = PersistenceHelper.manager.find((StatementSpec) qs);
// ArrayList<WTDocument> docList = new ArrayList<>();
if (qr == null) {
return result;
} else {
while (qr.hasMoreElements()) {
Object next = qr.nextElement();
if (null == next) {
continue;
}
if (next instanceof Persistable[]) {
Persistable[] p = (Persistable[]) next;
WTDocument doc = (WTDocument) p[0];
if (isLatestVersion(doc)) {
// docList.add(doc);
result.put(doc.getName(), doc);
}
}
}
}
return result;
}
%>
<%
serviceVar++;
out.println("你的 IP 地址 " + request.getRemoteAddr() +"<br/>");
String projectNumber = request.getParameter("projectNumber");
out.println(" 用户输入的项目编号: "+ projectNumber + "<br/>");
String minioPath = request.getParameter("minioPath");
out.println(" 用户输入的下载路径: "+ minioPath + "<br/>");
String dFileName = request.getParameter("dFileName");
out.println(" 用户输入的下载文件名: "+ dFileName + "<br/>");
String content1="初始化次数 : "+initVar;
String content2="响应客户请求次数 : "+serviceVar;
String content3="销毁次数 : "+destroyVar;
if (projectNumber != null && minioPath != null && dFileName != null) {
out.println(">>>>>>>>>>>>>>>>>> 开始 <<<<<<<<<<<<<<<<< <br/>");
out.println("<br/>");
out.println("<br/>");
try {
QueryResult qr = getProjectQR(projectNumber);
PIProject project = null;
WTContainer cObj = null;
String location = "";
while (qr.hasMoreElements()) {
Object next = qr.nextElement();
if ((next instanceof Persistable)) {
project = (PIProject) next;
}
}
Folder folder = null;
if (null != project) {
out.println("--------根据编号获取的 :" + project);
out.println("<br/>");
out.println("<br/>");
if (StringUtils.isNotEmpty(project.getProjectName())) {
out.println("--------根据编号获取的名称 :" + project.getProjectName());
out.println("<br/>");
out.println("<br/>");
out.println("--------根据编号获取的代号 :" + project.getProjectAbbreviation());
out.println("<br/>");
out.println("<br/>");
// 根据产品库名称,查找产品库(容器)对象
QuerySpec qs = new QuerySpec(WTContainer.class);
qs.setAdvancedQueryEnabled(true);
int[] ai = new int[] { 0, 1 };
SearchCondition sc = new SearchCondition(WTContainer.class, WTContainer.NAME, SearchCondition.EQUAL, project.getProjectName());
qs.appendWhere(sc,ai);
QueryResult cqr = PersistenceHelper.manager.find(qs);
while (cqr.hasMoreElements()) {
cObj = (WTContainer) cqr.nextElement();
out.println("--------- 获取 产品库(容器)对象: "+cObj);
out.println("<br/>");
out.println("<br/>");
}
// 获得根目录
if (cObj != null) {
Folder rootFolder = FolderHelper.service.getFolder("/Default", WTContainerRef.newWTContainerRef(cObj));
out.println("--------- rootFolder.getFolderPath: "+rootFolder.getFolderPath());
out.println("<br/>");
out.println("--------- rootFolder.getName(): "+rootFolder.getName());
out.println("<br/>");
folder = rootFolder;
out.println("--------- folder.getFolderPath: "+folder.getFolderPath());
out.println("<br/>");
out.println("--------- folder.getName(): "+folder.getName());
out.println("<br/>");
// QueryResult fqr = FolderHelper.service.findSubFolders(rootFolder);
//
// while (fqr.hasMoreElements()) {
//
// SubFolder subFolder = (SubFolder) fqr.nextElement();
//
// if (subFolder != null) {
//
// String folderPath = subFolder.getFolderPath();
// out.println("--------- folderPath: "+folderPath);
// out.println("<br/>");
// if (folderPath.contains("test")) {
// location = folderPath;
location = rootFolder.getFolderPath();
// out.println("--------- location: "+location);
// out.println("<br/>");
// }
// }
// }
}
}
}
// 获取项目容器
WTContainerRef wtContainerRef = WTContainerRef.newWTContainerRef(cObj);
// try {
// folder = FolderHelper.service.getFolder(location, wtContainerRef);
// } catch (Exception e) {
// e.printStackTrace();
// out.println("获取folder报错");
// out.println("<br/>");
// }
// 中文参数需要转译
String name= URLEncoder.encode(dFileName,"utf-8");
out.println("------------ 下载的文件名转译结果: " + name);
out.println("<br/>");
out.println("<br/>");
GetMethod getMethod = new GetMethod("http://127.0.0.1:8080/test/download?path="+minioPath+"&fileName="+name);
HttpClient httpClient = new HttpClient();
int i = httpClient.executeMethod(getMethod);
Header responseHeader = getMethod.getResponseHeader("Content-Disposition");
String headerStr = responseHeader.getValue();
out.println("---------------- responseHeader: " + headerStr);
out.println("<br/>");
out.println("<br/>");
String str1 = headerStr.substring(0, headerStr.indexOf("="));
out.println("------------- 截取responseHeader: " + str1);
out.println("<br/>");
out.println("<br/>");
String substring=headerStr.substring(str1.length()+1);
out.println("--------- responseHeader中的文件名: " + substring);
out.println("<br/>");
out.println("<br/>");
String subName = URLDecoder.decode(substring, "utf-8");
out.println("--- responseHeader中的文件名转译结果: " + subName);
out.println("<br/>");
out.println("<br/>");
// String docName = substring.substring(0, substring.indexOf("."));
// InputStream responseBodyAsStream = getMethod.getResponseBodyAsStream();
byte[] responseBody = getMethod.getResponseBody();
out.println("--------- byte[]: " + responseBody.length);
out.println("<br/>");
out.println("<br/>");
// 获取项目所有文档
Map<String, WTDocument> allDocMap = getProjectAllDoc(projectNumber);
out.println("<HR style=\"FILTER: alpha(opacity=100,finishopacity=0,style=3)\" width=\"80%\" color=#987cb9 SIZE=3>\n");
out.println("------------------------------遍历文档----------------------------<br/>");
for (Map.Entry<String, WTDocument> entry:allDocMap.entrySet()) {
out.println("Key = " + entry.getKey() + " Value = "+ entry.getValue() + " <br/>");
}
if (allDocMap.containsKey(subName)) {
WTDocument value = allDocMap.get(subName);
out.println("---- ---- ---- doc已存在 ---- ---- ---- name: " + subName + "<br/>");
Transaction tx = new Transaction();
// 断开原主要内容
deletePrimaryContent(value);
// 创建主要内容
ApplicationData theContent = ApplicationData.newApplicationData(value);
InputStream fileByMinIO = new ByteArrayInputStream(responseBody);
theContent.setFileName(subName);
theContent.setRole(ContentRoleType.PRIMARY);
theContent.setFileSize(responseBody.length);
tx.start();
// 更新主要内容
theContent = ContentServerHelper.service.updateContent(value, theContent, fileByMinIO);
ContentServerHelper.service.updateHolderFormat(value);
fileByMinIO.close();
tx.commit();
value = (WTDocument) PersistenceHelper.manager.refresh(value, true, true);
out.println("--------------- 创建完成: " + value);
out.println("<br/>");
} else {
Transaction tx = new Transaction();
try {
WTDocument doc = WTDocument.newWTDocument();
doc.setName(subName);
doc.setDocType(DocumentType.getDocumentTypeDefault());
doc.setContainerReference(wtContainerRef);
doc.setDomainRef(((WTContainer) wtContainerRef.getObject()).getDefaultDomainReference());
out.println(" ---- ---- doc即将关联目录");
out.println("<br/>");
FolderHelper.assignLocation((FolderEntry) doc, folder);
out.println(" ---- ---- 关联目录完成");
out.println("<br/>");
// WTDoc needs to be stored before content may be added
doc = (WTDocument) PersistenceHelper.manager.store(doc);
ApplicationData theContent = ApplicationData.newApplicationData(doc);
// File theFile = new File("/ptc/Windchill_11.0/Windchill/codebase/netmarkets/jsp/test/testCreateDoc.txt");
// byte[] bytes = getFileByMinIO();
InputStream fileByMinIO = new ByteArrayInputStream(responseBody);
theContent.setFileName(subName);
// ContentRoleType.PRIMARY 上传文件为文档主内容; ContentRoleType.SECONDARY 上传文档为附件
theContent.setRole(ContentRoleType.PRIMARY);
theContent.setFileSize(responseBody.length);
// FileInputStream fis = new FileInputStream(theFile);
tx.start();
theContent = ContentServerHelper.service.updateContent(doc, theContent, fileByMinIO);
ContentServerHelper.service.updateHolderFormat(doc);
fileByMinIO.close();
tx.commit();
doc = (WTDocument) PersistenceHelper.manager.refresh(doc, true, true);
out.println("--------------- 创建完成: " + doc);
out.println("<br/>");
// fis.close();
} catch (Exception e) {
e.printStackTrace();
out.println("错误!!! :" + e.getMessage());
out.println("<br/>");
}
}
} catch (Exception e) {
e.printStackTrace();
out.println("错误信息如下: <br/>");
out.println("ERROR: "+e.getMessage());
}
out.println("<br/>");
out.println("<br/>");
out.println("结束 <<<<<<<<<<<<<<<<< <br/>");
} else {
out.println("<br/>");
out.println("<font size=4 color=red> 请输入参数 </font>");
}
%>
<p>
今天的日期是: <%= new Date().toString()%>
</p>
<h1>测试实例</h1>
<p><%=content1%></p>
<p><%=content2%></p>
<p><%=content3%></p>
<p><%=userEmail%></p>
</body>
</html>
PLM下载文件到指定项目指定目录中 jsp版本
于 2022-06-30 08:44:17 首次发布