Skip to content

附件上传相关方法

概述

本节介绍软航OFFICE文档控件提供的附件上传相关方法,这些方法允许开发者管理文档的附件文件,包括添加附件、获取附件信息、删除附件等功能,为文档管理系统提供完整的附件处理能力。

附件管理

AddFileToUploadFileAttachFileList

语法:

javascript
AddFileToUploadFileAttachFileList(FileFieldName, bIsMultiSelect, lpstrFilter)

功能:
添加准备上传的附件文件。

参数:

名称必选/可选数据类型说明
FileFieldName必选string文件域名称
bIsMultiSelect必选bool是否允许多选
lpstrFilter必选string后缀名过滤字符串

返回值:
无返回值。

说明:
参数lpstrFilter:过滤字符串由描述与后缀名两段组成,中间用"|"符号分隔,即"描述|后缀名",如"doc文件|.doc"。如果有多个过滤条件,后缀名这段用";"分隔不同类型的文件,如"所有WORD文件|.doc;*.docx"。

注意: 此方法可以根据文件类型或用途不同,反复定义添加多个文件域。

使用示例:

javascript
// 添加单个文件域
function addSingleFileField() {
    try {
        // 添加Word文档文件域
        OCX_OBJ.AddFileToUploadFileAttachFileList("wordFiles", false, "Word文档|*.doc;*.docx");
        console.log("Word文档文件域已添加");
    } catch (error) {
        console.error("添加文件域失败:", error.message);
    }
}

// 添加多选文件域
function addMultiSelectFileField() {
    try {
        // 添加多选图片文件域
        OCX_OBJ.AddFileToUploadFileAttachFileList("imageFiles", true, "图片文件|*.jpg;*.jpeg;*.png;*.gif");
        console.log("多选图片文件域已添加");
    } catch (error) {
        console.error("添加多选文件域失败:", error.message);
    }
}

// 添加多个文件域
function addMultipleFileFields() {
    try {
        // 添加Word文档文件域
        OCX_OBJ.AddFileToUploadFileAttachFileList("wordFiles", false, "Word文档|*.doc;*.docx");
        
        // 添加Excel文档文件域
        OCX_OBJ.AddFileToUploadFileAttachFileList("excelFiles", false, "Excel文档|*.xls;*.xlsx");
        
        // 添加PDF文档文件域
        OCX_OBJ.AddFileToUploadFileAttachFileList("pdfFiles", false, "PDF文档|*.pdf");
        
        // 添加多选图片文件域
        OCX_OBJ.AddFileToUploadFileAttachFileList("imageFiles", true, "图片文件|*.jpg;*.jpeg;*.png;*.gif");
        
        console.log("多个文件域已添加");
    } catch (error) {
        console.error("添加多个文件域失败:", error.message);
    }
}

// 动态添加文件域
function addDynamicFileField(fieldName, multiSelect, filter) {
    try {
        if (fieldName && filter) {
            OCX_OBJ.AddFileToUploadFileAttachFileList(fieldName, multiSelect, filter);
            console.log("动态文件域已添加:", fieldName);
        } else {
            console.error("无效的文件域参数");
        }
    } catch (error) {
        console.error("动态添加文件域失败:", error.message);
    }
}

GetUploadFileAttachFileCount

语法:

javascript
GetUploadFileAttachFileCount()

功能:
获取待上传附件文件总数。

返回值:
数值型;附件数量。

说明:
获取待上传附件文件总数。

使用示例:

javascript
// 获取附件文件总数
function getUploadFileCount() {
    try {
        var fileCount = OCX_OBJ.GetUploadFileAttachFileCount();
        console.log("待上传附件文件总数:", fileCount);
        return fileCount;
    } catch (error) {
        console.error("获取附件文件总数失败:", error.message);
        return 0;
    }
}

// 检查是否有附件文件
function checkHasAttachments() {
    try {
        var fileCount = OCX_OBJ.GetUploadFileAttachFileCount();
        if (fileCount > 0) {
            console.log("有附件文件,数量:", fileCount);
            return true;
        } else {
            console.log("没有附件文件");
            return false;
        }
    } catch (error) {
        console.error("检查附件文件失败:", error.message);
        return false;
    }
}

// 验证附件文件数量
function validateAttachmentCount() {
    try {
        var fileCount = OCX_OBJ.GetUploadFileAttachFileCount();
        var maxCount = 10; // 最大附件数量
        
        if (fileCount > maxCount) {
            console.log("附件文件数量超过限制:", fileCount, ">", maxCount);
            return false;
        } else {
            console.log("附件文件数量正常:", fileCount);
            return true;
        }
    } catch (error) {
        console.error("验证附件文件数量失败:", error.message);
        return false;
    }
}

GetUploadFileAttachItemFile

语法:

javascript
GetUploadFileAttachItemFile(index)

功能:
根据索引值获取附件名。

参数:

名称必选/可选数据类型说明
index必选long文件索引ID

返回值:
String型字符串。

说明:
获取的附件名包含完整路径及文件名。

使用示例:

javascript
// 获取指定索引的附件文件
function getAttachmentFile(index) {
    try {
        var fileName = OCX_OBJ.GetUploadFileAttachItemFile(index);
        console.log("附件文件:", fileName);
        return fileName;
    } catch (error) {
        console.error("获取附件文件失败:", error.message);
        return "";
    }
}

// 遍历所有附件文件
function listAllAttachments() {
    try {
        var fileCount = OCX_OBJ.GetUploadFileAttachFileCount();
        var attachments = [];
        
        for (var i = 0; i < fileCount; i++) {
            var fileName = OCX_OBJ.GetUploadFileAttachItemFile(i);
            attachments.push(fileName);
            console.log("附件", i + 1, ":", fileName);
        }
        
        console.log("所有附件文件:", attachments);
        return attachments;
    } catch (error) {
        console.error("遍历附件文件失败:", error.message);
        return [];
    }
}

// 获取附件文件信息
function getAttachmentInfo(index) {
    try {
        var fileName = OCX_OBJ.GetUploadFileAttachItemFile(index);
        if (fileName) {
            var fileInfo = {
                index: index,
                fileName: fileName,
                filePath: fileName,
                fileExtension: fileName.split('.').pop().toLowerCase()
            };
            console.log("附件文件信息:", fileInfo);
            return fileInfo;
        } else {
            console.log("未找到指定索引的附件文件");
            return null;
        }
    } catch (error) {
        console.error("获取附件文件信息失败:", error.message);
        return null;
    }
}

附件删除

DeleAllFileFromUploadFileAttachFileList

语法:

javascript
DeleAllFileFromUploadFileAttachFileList()

功能:
清除所有待上传的附件文件。

返回值:
无返回值。

说明:
清除的文件包含调用上传方法时定义的所有文件域中的文件。

使用示例:

javascript
// 清除所有附件文件
function clearAllAttachments() {
    try {
        OCX_OBJ.DeleAllFileFromUploadFileAttachFileList();
        console.log("所有附件文件已清除");
    } catch (error) {
        console.error("清除所有附件文件失败:", error.message);
    }
}

// 重置附件列表
function resetAttachmentList() {
    try {
        // 清除所有附件文件
        OCX_OBJ.DeleAllFileFromUploadFileAttachFileList();
        
        // 重新添加文件域
        OCX_OBJ.AddFileToUploadFileAttachFileList("documents", true, "文档文件|*.doc;*.docx;*.pdf");
        
        console.log("附件列表已重置");
    } catch (error) {
        console.error("重置附件列表失败:", error.message);
    }
}

DeleFieldFromUploadFileAttachFileList

语法:

javascript
DeleFieldFromUploadFileAttachFileList(FileFieldName)

功能:
删除指定文件域中的附件文件。

参数:

名称必选/可选数据类型说明
FileFieldName必选string文件域名称

返回值:
无返回值。

说明:
删除指定文件域中的附件文件。

使用示例:

javascript
// 删除指定文件域
function deleteFileField(fieldName) {
    try {
        OCX_OBJ.DeleFieldFromUploadFileAttachFileList(fieldName);
        console.log("文件域已删除:", fieldName);
    } catch (error) {
        console.error("删除文件域失败:", error.message);
    }
}

// 删除多个文件域
function deleteMultipleFileFields() {
    try {
        var fieldNames = ["wordFiles", "excelFiles", "pdfFiles"];
        
        for (var i = 0; i < fieldNames.length; i++) {
            OCX_OBJ.DeleFieldFromUploadFileAttachFileList(fieldNames[i]);
            console.log("文件域已删除:", fieldNames[i]);
        }
        
        console.log("多个文件域已删除");
    } catch (error) {
        console.error("删除多个文件域失败:", error.message);
    }
}

DeleFileFromUploadFileAttachFileList

语法:

javascript
DeleFileFromUploadFileAttachFileList(FileName)

功能:
删除指定文件名的附件文件。

参数:

名称必选/可选数据类型说明
FileName必选long文件名

返回值:
无返回值。

说明:
参数FileName:必须包含完整路径及文件名。

使用示例:

javascript
// 删除指定文件名的附件
function deleteAttachmentFile(fileName) {
    try {
        OCX_OBJ.DeleFileFromUploadFileAttachFileList(fileName);
        console.log("附件文件已删除:", fileName);
    } catch (error) {
        console.error("删除附件文件失败:", error.message);
    }
}

// 删除多个指定文件
function deleteMultipleFiles() {
    try {
        var fileNames = [
            "D:\\document1.docx",
            "D:\\document2.pdf",
            "D:\\image1.jpg"
        ];
        
        for (var i = 0; i < fileNames.length; i++) {
            OCX_OBJ.DeleFileFromUploadFileAttachFileList(fileNames[i]);
            console.log("文件已删除:", fileNames[i]);
        }
        
        console.log("多个文件已删除");
    } catch (error) {
        console.error("删除多个文件失败:", error.message);
    }
}

DelUploadFileAttachItemFile

语法:

javascript
DelUploadFileAttachItemFile(index)

功能:
删除指定索引的附件文件。

参数:

名称必选/可选数据类型说明
index必选long文件索引ID

返回值:
无返回值。

说明:
删除指定索引的附件文件。

使用示例:

javascript
// 删除指定索引的附件
function deleteAttachmentByIndex(index) {
    try {
        OCX_OBJ.DelUploadFileAttachItemFile(index);
        console.log("索引", index, "的附件已删除");
    } catch (error) {
        console.error("删除指定索引附件失败:", error.message);
    }
}

// 删除多个索引的附件
function deleteMultipleAttachmentsByIndex() {
    try {
        var indices = [0, 2, 4]; // 要删除的索引
        
        for (var i = 0; i < indices.length; i++) {
            OCX_OBJ.DelUploadFileAttachItemFile(indices[i]);
            console.log("索引", indices[i], "的附件已删除");
        }
        
        console.log("多个索引的附件已删除");
    } catch (error) {
        console.error("删除多个索引附件失败:", error.message);
    }
}

// 删除最后一个附件
function deleteLastAttachment() {
    try {
        var fileCount = OCX_OBJ.GetUploadFileAttachFileCount();
        if (fileCount > 0) {
            var lastIndex = fileCount - 1;
            OCX_OBJ.DelUploadFileAttachItemFile(lastIndex);
            console.log("最后一个附件已删除,索引:", lastIndex);
        } else {
            console.log("没有附件文件可删除");
        }
    } catch (error) {
        console.error("删除最后一个附件失败:", error.message);
    }
}

方法分类总结

分类方法功能说明
附件添加AddFileToUploadFileAttachFileList添加准备上传的附件文件文件域管理
附件查询GetUploadFileAttachFileCount获取待上传附件文件总数数量统计
GetUploadFileAttachItemFile根据索引值获取附件名文件信息获取
附件删除DeleAllFileFromUploadFileAttachFileList清除所有待上传的附件文件全部清除
DeleFieldFromUploadFileAttachFileList删除指定文件域中的附件文件按域删除
DeleFileFromUploadFileAttachFileList删除指定文件名的附件文件按名删除
DelUploadFileAttachItemFile删除指定索引的附件文件按索引删除

使用流程

1. 基本附件管理流程

javascript
// 基本附件管理流程
function basicAttachmentManagement() {
    try {
        // 添加文件域
        OCX_OBJ.AddFileToUploadFileAttachFileList("documents", true, "文档文件|*.doc;*.docx;*.pdf");
        
        // 获取附件数量
        var fileCount = OCX_OBJ.GetUploadFileAttachFileCount();
        console.log("附件数量:", fileCount);
        
        // 遍历附件文件
        for (var i = 0; i < fileCount; i++) {
            var fileName = OCX_OBJ.GetUploadFileAttachItemFile(i);
            console.log("附件", i + 1, ":", fileName);
        }
        
        console.log("基本附件管理流程完成");
    } catch (error) {
        console.error("基本附件管理流程失败:", error.message);
    }
}

2. 附件上传流程

javascript
// 附件上传流程
function attachmentUploadFlow() {
    try {
        // 添加多个文件域
        OCX_OBJ.AddFileToUploadFileAttachFileList("wordFiles", false, "Word文档|*.doc;*.docx");
        OCX_OBJ.AddFileToUploadFileAttachFileList("excelFiles", false, "Excel文档|*.xls;*.xlsx");
        OCX_OBJ.AddFileToUploadFileAttachFileList("imageFiles", true, "图片文件|*.jpg;*.jpeg;*.png");
        
        // 获取总附件数量
        var totalCount = OCX_OBJ.GetUploadFileAttachFileCount();
        console.log("总附件数量:", totalCount);
        
        // 处理每个附件
        for (var i = 0; i < totalCount; i++) {
            var fileName = OCX_OBJ.GetUploadFileAttachItemFile(i);
            console.log("处理附件:", fileName);
        }
        
        console.log("附件上传流程完成");
    } catch (error) {
        console.error("附件上传流程失败:", error.message);
    }
}

3. 附件清理流程

javascript
// 附件清理流程
function attachmentCleanupFlow() {
    try {
        // 获取当前附件数量
        var fileCount = OCX_OBJ.GetUploadFileAttachFileCount();
        console.log("清理前附件数量:", fileCount);
        
        // 删除指定文件域
        OCX_OBJ.DeleFieldFromUploadFileAttachFileList("tempFiles");
        
        // 清除所有附件
        OCX_OBJ.DeleAllFileFromUploadFileAttachFileList();
        
        // 验证清理结果
        var remainingCount = OCX_OBJ.GetUploadFileAttachFileCount();
        console.log("清理后附件数量:", remainingCount);
        
        console.log("附件清理流程完成");
    } catch (error) {
        console.error("附件清理流程失败:", error.message);
    }
}

完整示例

1. 基础附件管理

javascript
// 基础附件管理示例
function basicAttachmentManagement() {
    try {
        // 添加文件域
        OCX_OBJ.AddFileToUploadFileAttachFileList("documents", true, "文档文件|*.doc;*.docx;*.pdf");
        
        // 获取附件信息
        var fileCount = OCX_OBJ.GetUploadFileAttachFileCount();
        console.log("附件管理完成,文件数量:", fileCount);
    } catch (error) {
        console.error("基础附件管理失败:", error.message);
    }
}

2. 高级附件管理

javascript
// 高级附件管理示例
function advancedAttachmentManagement() {
    try {
        // 附件管理配置
        var attachmentConfig = {
            fileFields: [
                { name: "wordFiles", multiSelect: false, filter: "Word文档|*.doc;*.docx" },
                { name: "excelFiles", multiSelect: false, filter: "Excel文档|*.xls;*.xlsx" },
                { name: "imageFiles", multiSelect: true, filter: "图片文件|*.jpg;*.jpeg;*.png;*.gif" }
            ],
            maxFileCount: 20,
            allowedExtensions: [".doc", ".docx", ".xls", ".xlsx", ".pdf", ".jpg", ".jpeg", ".png", ".gif"]
        };
        
        // 添加文件域
        for (var i = 0; i < attachmentConfig.fileFields.length; i++) {
            var field = attachmentConfig.fileFields[i];
            OCX_OBJ.AddFileToUploadFileAttachFileList(field.name, field.multiSelect, field.filter);
        }
        
        // 获取附件信息
        var fileCount = OCX_OBJ.GetUploadFileAttachFileCount();
        console.log("高级附件管理完成,文件数量:", fileCount);
        
        // 验证文件数量限制
        if (fileCount > attachmentConfig.maxFileCount) {
            console.log("文件数量超过限制,需要清理");
            OCX_OBJ.DeleAllFileFromUploadFileAttachFileList();
        }
        
    } catch (error) {
        console.error("高级附件管理失败:", error.message);
    }
}

3. 附件质量控制

javascript
// 附件质量控制示例
function attachmentQualityControl() {
    try {
        // 获取附件数量
        var fileCount = OCX_OBJ.GetUploadFileAttachFileCount();
        
        // 检查附件质量
        var validAttachments = [];
        var invalidAttachments = [];
        
        for (var i = 0; i < fileCount; i++) {
            var fileName = OCX_OBJ.GetUploadFileAttachItemFile(i);
            var fileExtension = fileName.split('.').pop().toLowerCase();
            
            // 检查文件扩展名
            var allowedExtensions = [".doc", ".docx", ".xls", ".xlsx", ".pdf", ".jpg", ".jpeg", ".png", ".gif"];
            var isValid = allowedExtensions.includes("." + fileExtension);
            
            if (isValid) {
                validAttachments.push(fileName);
            } else {
                invalidAttachments.push(fileName);
            }
        }
        
        console.log("有效附件:", validAttachments);
        console.log("无效附件:", invalidAttachments);
        
        // 删除无效附件
        for (var i = 0; i < invalidAttachments.length; i++) {
            OCX_OBJ.DeleFileFromUploadFileAttachFileList(invalidAttachments[i]);
        }
        
        console.log("附件质量控制完成");
    } catch (error) {
        console.error("附件质量控制失败:", error.message);
    }
}

注意事项

  1. 文件域管理:可以根据文件类型或用途不同,反复定义添加多个文件域
  2. 文件路径:获取的附件名包含完整路径及文件名
  3. 索引管理:文件索引从0开始,需要正确处理索引范围
  4. 文件过滤:过滤字符串格式为"描述|后缀名",多个后缀用";"分隔
  5. 错误处理:实现完善的错误处理机制
  6. 性能考虑:大量附件时注意性能优化
  7. 安全考虑:验证文件类型和大小,防止安全风险

错误处理

javascript
// 附件管理错误处理
function handleAttachmentError(operation, error) {
    console.error("附件管理失败:", operation, error.message);
    
    switch(operation) {
        case 'AddFileToUploadFileAttachFileList':
            console.log("添加文件域失败,请检查:");
            console.log("1. 文件域名称是否有效");
            console.log("2. 过滤字符串格式是否正确");
            console.log("3. 是否支持多选设置");
            break;
        case 'GetUploadFileAttachFileCount':
            console.log("获取附件数量失败,请检查:");
            console.log("1. 控件是否已正确初始化");
            console.log("2. 是否有附件文件");
            break;
        case 'GetUploadFileAttachItemFile':
            console.log("获取附件文件失败,请检查:");
            console.log("1. 索引是否在有效范围内");
            console.log("2. 附件文件是否存在");
            break;
        case 'DeleAllFileFromUploadFileAttachFileList':
            console.log("清除所有附件失败,请检查:");
            console.log("1. 是否有权限删除文件");
            console.log("2. 文件是否被其他程序占用");
            break;
        default:
            console.log("未知附件管理操作失败");
    }
}

最佳实践

1. 附件管理最佳实践

javascript
// 附件管理最佳实践
function attachmentManagementBestPractice() {
    try {
        // 附件管理配置
        var attachmentConfig = {
            fileFields: [
                { name: "documents", multiSelect: true, filter: "文档文件|*.doc;*.docx;*.pdf" },
                { name: "images", multiSelect: true, filter: "图片文件|*.jpg;*.jpeg;*.png;*.gif" }
            ],
            maxFileCount: 50,
            maxFileSize: 10 * 1024 * 1024 // 10MB
        };
        
        // 应用附件管理配置
        function applyAttachmentConfig() {
            try {
                // 添加文件域
                for (var i = 0; i < attachmentConfig.fileFields.length; i++) {
                    var field = attachmentConfig.fileFields[i];
                    OCX_OBJ.AddFileToUploadFileAttachFileList(field.name, field.multiSelect, field.filter);
                }
                
                console.log("附件管理配置应用成功");
            } catch (error) {
                handleAttachmentError('AddFileToUploadFileAttachFileList', error);
            }
        }
        
        // 应用配置
        applyAttachmentConfig();
        
    } catch (error) {
        console.error("附件管理最佳实践失败:", error.message);
    }
}

2. 附件质量控制最佳实践

javascript
// 附件质量控制最佳实践
function attachmentQualityControlBestPractice() {
    try {
        // 附件质量控制
        function controlAttachmentQuality() {
            try {
                // 获取附件数量
                var fileCount = OCX_OBJ.GetUploadFileAttachFileCount();
                
                // 检查附件质量
                var qualityReport = {
                    totalFiles: fileCount,
                    validFiles: 0,
                    invalidFiles: 0,
                    removedFiles: []
                };
                
                for (var i = fileCount - 1; i >= 0; i--) {
                    var fileName = OCX_OBJ.GetUploadFileAttachItemFile(i);
                    var fileExtension = fileName.split('.').pop().toLowerCase();
                    
                    // 检查文件扩展名
                    var allowedExtensions = [".doc", ".docx", ".xls", ".xlsx", ".pdf", ".jpg", ".jpeg", ".png", ".gif"];
                    var isValid = allowedExtensions.includes("." + fileExtension);
                    
                    if (isValid) {
                        qualityReport.validFiles++;
                    } else {
                        qualityReport.invalidFiles++;
                        qualityReport.removedFiles.push(fileName);
                        OCX_OBJ.DelUploadFileAttachItemFile(i);
                    }
                }
                
                console.log("附件质量控制完成:", qualityReport);
                return qualityReport;
            } catch (error) {
                console.error("附件质量控制失败:", error.message);
                return null;
            }
        }
        
        // 执行质量控制
        var qualityResult = controlAttachmentQuality();
        console.log("附件质量控制结果:", qualityResult);
        
    } catch (error) {
        console.error("附件质量控制最佳实践失败:", error.message);
    }
}

技术要点

  1. 文件域管理:可以根据文件类型或用途不同,反复定义添加多个文件域
  2. 文件路径:获取的附件名包含完整路径及文件名
  3. 索引管理:文件索引从0开始,需要正确处理索引范围
  4. 文件过滤:过滤字符串格式为"描述|后缀名",多个后缀用";"分隔
  5. 错误处理:完善的错误处理机制
  6. 性能优化:大量附件时注意性能优化
  7. 安全控制:验证文件类型和大小,防止安全风险

总结

附件上传相关方法为软航OFFICE文档控件提供了完整的附件管理功能。通过AddFileToUploadFileAttachFileList方法可以添加文件域,通过GetUploadFileAttachFileCount方法可以获取附件数量,通过GetUploadFileAttachItemFile方法可以获取附件信息,通过DeleAllFileFromUploadFileAttachFileList方法可以清除所有附件,通过DeleFieldFromUploadFileAttachFileList方法可以删除指定文件域,通过DeleFileFromUploadFileAttachFileList方法可以删除指定文件,通过DelUploadFileAttachItemFile方法可以删除指定索引的附件,为开发者提供了灵活的附件管理接口,大大提升了文档管理系统的附件处理能力。