PLM下载文件到指定项目指定目录中 jsp版本

<%@ 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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Aras Innovator PLM是一款先进的产品生命周期管理(Product Lifecycle Management,PLM)软件,可以帮助企业管理和协调产品的整个生命周期过程。PLM是一个综合性的系统,包括产品的设计、制造、售后服务和最终退役的全过程管理。 要下载Aras Innovator PLM,首先需要访问Aras官方网站。在官网首页,可以找到PLM解决方案菜单,点击进入PLM解决方案页面。在该页面上,可以找到关于Aras Innovator PLM的详细介绍和功能说明。 在介绍页面上,可以找到下载Aras Innovator PLM的链接。点击该链接,系统会自动跳转到下载页面。在下载页面上,用户可以看到不同版本的软件。 根据自己的需要和操作系统,选择适合自己的版本,并点击下载按钮。软件将开始下载,并在下载完成后保存到指定文件下载完成后,需要打开下载文件,并按照软件提供的安装向导进行安装。在安装过程,需要同意软件的许可协议,并按照向导的提示完成安装程序。 安装完成后,可以打开Aras Innovator PLM并开始使用。在首次打开时,系统可能会要求用户创建管理员账户和设置数据库等相关配置。 Aras Innovator PLM是一款功能强大、可定制性高、适用于各种企业规模和行业的PLM软件。通过下载和安装Aras Innovator PLM,企业可以更好地管理和控制产品的生命周期过程,提高产品质量、效率和竞争力。 ### 回答2: Aras Innovator PLM 是一款企业级产品生命周期管理软件,用于管理产品从概念开发到退役的整个生命周期。通过Aras Innovator PLM,企业可以集管理产品信息,包括设计文档、工艺流程、组装指导和维护手册等。同时,Aras Innovator PLM 还提供了强大的数据管理和工作流引擎,以确保产品开发过程的各个环节能够高效、透明地进行。 要下载Aras Innovator PLM,首先需要访问Aras官方网站,并根据具体需求选择合适的版本。Aras官方网站提供了各个版本下载链接,包括免费的社区版本和企业级版本。根据自身的情况和需求,选择相应的版本进行下载。 在下载页面,通常需要填写一些基本信息,如姓名、公司、电子邮箱等。填写完毕后,点击“下载”按钮即可开始下载Aras Innovator PLM下载完成后,需要按照指示进行安装。安装过程可能需要提供一些配置信息,如数据库类型、服务器地址等。根据实际情况填写并完成安装。 一旦安装完成,就可以使用Aras Innovator PLM了。用户可以通过Web浏览器访问Aras Innovator PLM的界面,并使用提供的用户名和密码登录。登录后,用户可以根据权限进行产品信息的查看、编辑和管理,也可以参与各种工作流程,以推动产品的开发和改进。 总之,通过下载和使用Aras Innovator PLM,企业可以更好地管理产品的生命周期,提高开发效率,降低成本,同时保证产品质量和合规性。 ### 回答3: Aras Innovator PLM是一款功能强大的产品生命周期管理(PLM)软件。它帮助企业管理整个产品的设计、开发、制造和维护过程。下载Aras Innovator PLM的步骤如下: 1. 打开Aras Innovator PLM的官方网站并导航到下载页面。 2. 在下载页面上,查找适用于您的操作系统的Aras Innovator PLM软件版本。Aras Innovator PLM可以在Windows、Linux和Unix操作系统上运行。 3. 选择适合您的操作系统的版本后,点击下载按钮。 4. 等待下载完成。下载时间将取决于您的网络连接和文件大小。 5. 下载完成后,找到下载文件并双击运行。 6. 按照安装向导的指示完成软件的安装过程。在安装过程,您可以选择安装位置、组件以及其他选项。 7. 完成安装后,打开Aras Innovator PLM软件并开始使用。 Aras Innovator PLM具有许多功能,包括产品数据管理、文档管理、项目管理、质量管理等。通过使用Aras Innovator PLM,企业可以更好地组织和跟踪产品相关的数据、文件和任务,提高生产效率、减少错误并提供更好的产品质量。它还提供了可自定义的功能,以满足不同企业的需求。 总而言之,通过下载和使用Aras Innovator PLM,企业可以更好地管理产品的整个生命周期,并从获得更高的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值