Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Làm thế nào để mã hóa và giải mã tập tin đính kèm tập tin một lập trình bằng cách sử dụng Visual C# InfoPath 2003

Hỗ trợ dành cho Office 2003 đã kết thúc

Microsoft đã kết thúc hỗ trợ dành cho Office 2003 vào ngày 8 tháng 4 năm 2014. Thay đổi này đã ảnh hưởng đến các bản cập nhật phần mềm và các tùy chọn bảo mật của bạn. Tìm hiểu ý nghĩa của điều này với bạn và cách thực hiện để luôn được bảo vệ.

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:892730
TÓM TẮT
Microsoft Office InfoPath 2007 hoặc Microsoft Office InfoPath 2003 Service Pack 1 (SP1), bạn có thể sử dụng một Tập tin đính kèm tập tin kiểm soát để đính kèm một tập tin để tiêu bản mẫu InfoPath. Trong trường hợp cụ thể, bạn có thể mã hóa và sau đó giải mã tệp được đính kèm vào các Tập tin đính kèm tập tin kiểm soát. Trong trường hợp này, bạn có thể sử dụng Microsoft Visual C# để tạo ra một Mã hóa lớp học và một Bộ giải mã lớp học. Sau đó, bạn có thể sử dụng các Mã hóa lớp học và các Bộ giải mã lớp học để mã hóa và giải mã tập tin tập tin đính kèm.
GIỚI THIỆU
Bài viết này giới thiệu làm thế nào để mã hóa và giải mã tập tin đính kèm tập tin một lập trình bằng cách sử dụng Microsoft Visual C# InfoPath 2003. Để có thông tin về làm thế nào để làm điều này trong InfoPath 2010 hoặc trong InfoPath 2007, xem các trang web sau đây: Làm thế nào để mã hóa và giải mã một tập tin đính kèm tập tin lập trình bằng cách sử dụng Visual C# trong InfoPath 2010 hoặc trong InfoPath 2007.
THÔNG TIN THÊM
Microsoft cung cấp lập trình ví dụ để minh hoạ không có bảo hành hoặc thể hiện hay ngụ ý. Điều này bao gồm, nhưng không giới hạn để bảo đảm ngụ ý khả năng bán hàng hoặc cho một cụ thể mục đích. Bài viết này giả định rằng bạn đã quen thuộc với các chương trình ngôn ngữ được chứng minh và với các công cụ được sử dụng để tạo ra và gỡ lỗi thủ tục. Microsoft hỗ trợ các kỹ sư có thể giúp giải thích các chức năng của một thủ tục cụ thể, nhưng họ sẽ không sửa đổi các Ví dụ để cung cấp thêm chức năng hoặc xây dựng quy trình để đáp ứng của bạn yêu cầu cụ thể.

Tạo một dự án Visual C# InfoPath 2003

  1. Bắt đầu Microsoft Visual Studio.NET 2003.
  2. Trên các Tập tin trình đơn, nhấp vàoMới, sau đó bấm Dự án.
  3. Trong các Dự án mới hộp thoại hộp, bấm vàoVisual C# các dự án trong các dự án Microsoft Office InfoPath thư mục.
  4. Trong các Tên hộp, loạiAttachmentEncoding, sau đó bấmOk.
  5. Trong thuật sĩ dự án văn phòng của Microsoft, bấmTạo ra một mẫu hình thức mới, sau đó bấmKết thúc.

    Thuật sĩ dự án văn phòng Microsoft tạo một mới Visual Studio.NET 2003 dự án được đặt tên AttachmentEncoding. Một InfoPath dạng mẫu cũng được tạo ra. Các mẫu hình thức InfoPath tên là AttachmentEncoding.

Tạo một lớp Encoder trong Visual Studio.NET 2003

  1. Trong giải pháp Explorer, bấm chuột phải vàoAttachmentEncoding, điểm đến Thêm, và sau đó Nhấp vào Thêm mục mới.
  2. Trong các Thêm mục mới hộp thoại hộp, bấm vàoLớp học trong các Tiêu bản cửa sổ, loạiInfoPathAttachmentEncoder.cs trong cácTên hộp, và sau đó nhấp vào Mở.
  3. Thay thế tất cả các mã trong InfoPathAttachmentEncoder.cs tập tin với đoạn mã sau.
    using System;using System.IO;using System.Text;using System.Security.Cryptography;namespace InfoPathAttachmentEncoding{	/// <summary>	/// InfoPathAttachment encodes file data into the format expected by InfoPath for use in file attachment nodes.	/// </summary>	public class InfoPathAttachmentEncoder	{		private string base64EncodedFile = string.Empty;		private string fullyQualifiedFileName;		/// <summary>		/// Creates an encoder to create an InfoPath attachment string.		/// </summary>		/// <param name="fullyQualifiedFileName"></param>		public InfoPathAttachmentEncoder(string fullyQualifiedFileName)		{			if (fullyQualifiedFileName == string.Empty)				throw new ArgumentException("Must specify file name", "fullyQualifiedFileName");			if (!File.Exists(fullyQualifiedFileName))				throw new FileNotFoundException("File does not exist: " + fullyQualifiedFileName, fullyQualifiedFileName);			this.fullyQualifiedFileName = fullyQualifiedFileName;		}		/// <summary>		/// Returns a Base64 encoded string.		/// </summary>		/// <returns>String</returns>		public string ToBase64String()		{			if (base64EncodedFile != string.Empty)				return base64EncodedFile;			// This memory stream will hold the InfoPath file attachment buffer before Base64 encoding.			MemoryStream ms = new MemoryStream();			// Get the file information.			using (BinaryReader br = new BinaryReader(File.Open(fullyQualifiedFileName, FileMode.Open, FileAccess.Read, FileShare.Read)))			{				string fileName = Path.GetFileName(fullyQualifiedFileName);				uint fileNameLength = (uint)fileName.Length + 1;				byte[] fileNameBytes = Encoding.Unicode.GetBytes(fileName);				using (BinaryWriter bw = new BinaryWriter(ms))				{					// Write the InfoPath attachment signature. 					bw.Write(new byte[] { 0xC7, 0x49, 0x46, 0x41 });					// Write the default header information.					bw.Write((uint)0x14);	// size					bw.Write((uint)0x01);	// version					bw.Write((uint)0x00);	// reserved					// Write the file size.					bw.Write((uint)br.BaseStream.Length);					// Write the size of the file name.					bw.Write((uint)fileNameLength);					// Write the file name (Unicode encoded).					bw.Write(fileNameBytes);					// Write the file name terminator. This is two nulls in Unicode.					bw.Write(new byte[] {0,0});					// Iterate through the file reading data and writing it to the outbuffer.					byte[] data = new byte[64*1024];					int bytesRead = 1;					while (bytesRead > 0)					{						bytesRead = br.Read(data, 0, data.Length);						bw.Write(data, 0, bytesRead);					}				}			}			// This memorystream will hold the Base64 encoded InfoPath attachment.			MemoryStream msOut = new MemoryStream();			using (BinaryReader br = new BinaryReader(new MemoryStream(ms.ToArray())))			{				// Create a Base64 transform to do the encoding.				ToBase64Transform tf = new ToBase64Transform();				byte[] data = new byte[tf.InputBlockSize];				byte[] outData = new byte[tf.OutputBlockSize];				int bytesRead = 1;				while (bytesRead > 0)				{					bytesRead = br.Read(data, 0, data.Length);					if (bytesRead == data.Length)						tf.TransformBlock(data, 0, bytesRead, outData, 0);					else						outData = tf.TransformFinalBlock(data, 0, bytesRead);					msOut.Write(outData, 0, outData.Length);				}			}			msOut.Close();						return base64EncodedFile = Encoding.ASCII.GetString(msOut.ToArray());		}	}}

Tạo một bộ giải mã lớp trong Visual Studio.NET 2003

  1. Trong giải pháp Explorer, bấm chuột phải vàoAttachmentEncoding, điểm đến Thêm, và sau đó Nhấp vào Thêm mục mới.
  2. Trong các Thêm mục mới hộp thoại hộp, bấm vàoLớp học trong các Tiêu bản cửa sổ, loạiInfoPathAttachmentDecoder.cs trong cácTên hộp, và sau đó nhấp vào Mở.
  3. Thay thế tất cả các mã trong InfoPathAttachmentDecoder.cs tập tin với đoạn mã sau.
    using System;using System.IO;using System.Text;namespace InfoPathAttachmentEncoding{	/// <summary>	/// Decodes a file attachment and saves it to a specified path.	/// </summary>	public class InfoPathAttachmentDecoder	{		private const int SP1Header_Size = 20;		private const int FIXED_HEADER = 16;		private int fileSize;		private int attachmentNameLength;		private string attachmentName;		private byte[] decodedAttachment;		/// <summary>		/// Accepts the Base64 encoded string		/// that is the attachment.		/// </summary>		public InfoPathAttachmentDecoder(string theBase64EncodedString)		{			byte [] theData = Convert.FromBase64String(theBase64EncodedString);			using(MemoryStream ms = new MemoryStream(theData))			{				BinaryReader theReader = new BinaryReader(ms);							DecodeAttachment(theReader);			}		}		private void DecodeAttachment(BinaryReader theReader)		{			//Position the reader to get the file size.			byte[] headerData = new byte[FIXED_HEADER];			headerData = theReader.ReadBytes(headerData.Length);			fileSize = (int)theReader.ReadUInt32();			attachmentNameLength = (int)theReader.ReadUInt32() * 2;						byte[] fileNameBytes = theReader.ReadBytes(attachmentNameLength);			//InfoPath uses UTF8 encoding.			Encoding enc = Encoding.Unicode;			attachmentName = enc.GetString(fileNameBytes, 0, attachmentNameLength - 2);			decodedAttachment = theReader.ReadBytes(fileSize);		}		public void SaveAttachment(string saveLocation)		{			string fullFileName = saveLocation;			if(!fullFileName.EndsWith(Path.DirectorySeparatorChar))			{				fullFileName += Path.DirectorySeparatorChar;			}			fullFileName += attachmentName;			if(File.Exists(fullFileName))				File.Delete(fullFileName);						FileStream fs = new FileStream(fullFileName, FileMode.CreateNew);			BinaryWriter bw = new BinaryWriter(fs);			bw.Write(decodedAttachment);			bw.Close();			fs.Close();		}		public string Filename		{			get{ return attachmentName; }		}		public byte[] DecodedAttachment		{			get{ return decodedAttachment; }		}	}	}

Thêm một điều khiển tập tin đính kèm và một hộp văn bản kiểm soát mẫu InfoPath

  1. Trong mẫu hình thức AttachmentEncoding InfoPath, Nhấp vào Điều khiển trong các Công việc thiết kế nhiệm vụ ngăn.
  2. Trong các Điều khiểnnhiệm vụ ngăn, bấm vàoTập tin Tập tin đính kèm dướiChèn điều khiển.
  3. Nhấp chuột phải vào các Tập tin đính kèm tập tin kiểm soát, và sau đó nhấp vào Thuộc tính tệp đính kèm.
  4. Trong các Thuộc tính tệp đính kèm hộp thoại hộp, loại theAttachmentField trong các Lĩnh vực Tên hộp, và sau đó nhấp vào Ok.
  5. Trong các Điều khiểnnhiệm vụ ngăn, bấm vàoHộp văn bản dướiChèn điều khiển.
  6. Nhấp chuột phải vào các Hộp văn bản kiểm soát, và sau đó Nhấp vào Thuộc tính hộp văn bản.
  7. Trong các Thuộc tính hộp văn bản hộp thoại, loại theAttachmentName trong các Lĩnh vực Tên hộp, và sau đó nhấp vào Ok.

Thêm một nút đính kèm vào các hình thức InfoPath

  1. Trong các Điều khiểnnhiệm vụ ngăn, bấm vàoNút dướiChèn điều khiển.
  2. Nhấp chuột phải vào các mới Nút kiểm soát, và sau đó bấm Thuộc tính nút.
  3. Trong các Thuộc tính nút hộp thoại, loạiĐính kèm trong các Nhãn hiệu hộp, loạibtnAttach trong các ID hộp, và sau đó nhấp vàoChỉnh sửa hình thức mã.
  4. Thêm mã sau vào các btnAttach_OnClick phương pháp.
    //Get a reference to the attachment node.IXMLDOMNode theAttachmentNode = thisXDocument.DOM.selectSingleNode("my:myFields/my:theAttachmentField");//Get a reference to the filename node.IXMLDOMNode fileNameNode = thisXDocument.DOM.selectSingleNode("my:myFields/my:theAttachmentName");//Get the text of the node.String fileName = fileNameNode.text;if(fileName.Length > 0){	//Encode the file and assign it to the attachment node.	InfoPathAttachmentEncoding.Encoder myEncoder = new InfoPathAttachmentEncoding.Encoder(fileName);	if(theAttachmentNode.attributes.getNamedItem("xsi:nil") != null)		theAttachmentNode.attributes.removeNamedItem("xsi:nil");	theAttachmentNode.text = myEncoder.ToBase64String();}	

Thêm một nút lưu mẫu InfoPath

  1. Chuyển sang hình thức AttachmentEncoding InfoPath mẫu.
  2. Trong các Điều khiểnnhiệm vụ ngăn, bấm vàoNút dướiChèn điều khiển.
  3. Nhấp chuột phải vào các mới Nút kiểm soát, và sau đó bấm Thuộc tính nút.
  4. Trong các Thuộc tính nút hộp thoại, loạiTiết kiệm trong các Nhãn hiệu hộp, loạibtnSave trong các ID hộp, và sau đó nhấp vàoChỉnh sửa hình thức mã.
  5. Thêm mã sau vào các btnSave _OnClick phương pháp.
    //Get a reference to the attachment node.IXMLDOMNode n = thisXDocument.DOM.selectSingleNode("my:myFields/my:theAttachmentField");//Get the text of the node.String theAttachment = n.text;if(theAttachment.Length > 0){	InfoPathAttachmentEncoding.Decoder myDecoder = new InfoPathAttachmentEncoding.Decoder(theAttachment);	myDecoder.SaveAttachment(@"<Path to save the file>");}			
    Lưu ý Trong mã này, thay thế <Path to="" save="" the="" file=""></Path> với vị trí nơi bạn muốn lưu các tập tin.

Đảm bảo rằng các mẫu hình thức InfoPath là hoàn toàn đáng tin cậy

Trước khi bạn có thể thử nghiệm mẫu đơn này, InfoPath dạng mẫu phải được hoàn toàn đáng tin cậy. Bạn có thể sử dụng một trong những phương pháp sau đây để đảm bảo tiêu bản mẫu InfoPath là hoàn toàn đáng tin cậy:
  • Sử dụng Microsoft.Tiện ích cấu hình NET Framework 1.1 để cấp quyền truy cập đầy đủ tin tưởng chỉ đến mã của bạn Visual C#.
  • Sử dụng tiện ích RegForm từ phần mềm InfoPath Phát triển Kit (SDK) để thực hiện dưới hình thức một hình thức hoàn toàn đáng tin cậy. Điều này cho phép đầy đủ Tin tưởng cho phép đến Visual C# mã của bạn.
  • Sử dụng một chứng chỉ ký mã để ký điện tử mẫu bản mẫu tập tin (.xsn). Khi bạn sử dụng một chứng chỉ ký mã để ký điện tử tập tin mẫu hình thức, người dùng sẽ được nhắc để tin tưởng các hình thức khi họ mở các hình thức. Điều này làm cho các hình thức hoàn toàn tin tưởng. Vì vậy, tin tưởng đầy đủ quyền truy cập cấp cho Visual C# mã của bạn.
  • Sử dụng các IPFullTrust vĩ mô từ SDK InfoPath để làm cho các hình thức hoàn toàn đáng tin cậy hình thức. Các IPFullTrust macro tự động cài đặt tệp kê (.xsf) và các hình thức tập tin mẫu trong dự án InfoPath cho đầy đủ sự tin tưởng, và sau đó các IPFullTrust macro tự động đăng ký mẫu hình thức.

    Cho thêm thông tin về làm thế nào để cài đặt và sử dụng vĩ mô, truy cập vào sau đây Trang Web mạng nhà phát triển của Microsoft (MSDN):
  • Sử dụng bên ngoài tự động hóa trong InfoPath để gọi các RegisterSolution phương pháp. Tóm lại, phương pháp này chỉ được sử dụng cho sự phát triển hình thức bởi vì một hình thức đăng ký chỉ đăng ký cho một máy tính cá nhân. Đối với bất kỳ các hình thức khác, những người dùng khác phải đăng ký các hình thức bổ sung riêng của họ máy vi tính. Chúng tôi không khuyên bạn nên phương pháp này cho các hình thức khác. Chúng tôi đề nghị bất kỳ một trong những phương pháp trước khi bạn xuất bản các hình thức.
Bởi vì hình thức này là dưới hình thức phát triển, bạn có thể sử dụng các phương pháp cuối cùng. Để thực hiện việc này, xác định vị trí các hình thức AttachmentEncoding InfoPath mẫu, và sau đó làm theo các bước sau:
  1. Trên các Công cụ trình đơn, nhấp vào Hình thức Tùy chọn.
  2. Bấm vào các An ninh tab.
  3. Nhấn vào đây để xóa các Tự động xác định bảo mật cấp dựa trên thiết kế của hình thức (khuyến cáo) hộp kiểm.

    Lưu ý InfoPath không thể tự động phát hiện logic kinh doanh mà yêu cầu quyền truy cập đầy đủ tin cậy. Vì vậy, bạn phải rõ ràng cấp đầy đủ Tin tưởng cho phép.
  4. Nhấp vào Đầy đủ niềm tin, sau đó bấmOk.
  5. Đóng AttachmentEncoding InfoPath dạng mẫu. Nếu bạn bị nhắc lưu các thay đổi, hãy nhấp vào .

    Lưu ý Đừng đóng Visual Studio.NET 2003 dự án.
  6. Trong phòng thu trực quan.NET 2003, bấm đúp vào cácManifest.xsf tập tin trong giải pháp Explorer. Các tập tin Manifest.xsf sẽ mở ra.
  7. Tại nút gốc, xác định vị trí các publishUrl thuộc tính. Loại bỏ các publishUrl thuộc tính và giá trị của các publishUrl thuộc tính.
  8. Lưu các thay đổi, và sau đó đóng Manifest.xsf tập tin.
  9. Nhấp vào Bắt đầu, bấm Chạy, loại Notepad, sau đó bấmOk.
  10. Thêm mã sau vào tập tin văn bản trống.
    oApp = WScript.CreateObject("InfoPath.ExternalApplication");strAbsolutePath = "<project_folder_url>\\Manifest.xsf";oApp.RegisterSolution(strAbsolutePath,"overwrite"); 
    Lưu ý Trong mã này, thay thế<project_folder_url></project_folder_url> với đường dẫn của các Manifest.xsf tập tin trong thư mục dự án của bạn. Hãy nhớ để thoát khỏi con đường của các Manifest.xsf tập tin. Tất cả các backslashes duy nhất (\) trong con đường phải được thay thế bằng hai backslashes (\).
  11. Lưu các tập tin Manifest.xsf trên máy tính như các Register.js tập tin.
  12. Để gọi các RegisterSolution phương pháp, bấm đúp vào các Register.js tập tin mà bạn tạo ra.

Kiểm tra các hình thức

  1. Trong phòng thu trực quan AttachmentEncoding.NET 2003 dự án, Nhấp vào Bắt đầu trên các Gỡ lỗi trình đơn. Điều này bắt đầu các hình thức InfoPath trong chế độ xem trước.
  2. Về hình thức InfoPath, nhập đường dẫn tập tin đó bạn muốn đính kèm trong hộp văn bản, và sau đó nhấp vàoĐính kèm.

    Lưu ý Bấm đúp vào các Tập tin đính kèm tập tin kiểm soát để xác minh rằng các tập tin được mã hóa một cách chính xác.
  3. Nhấp vào Tiết kiệm. Xác định vị trí con đường mà bạn được cung cấp trong các "thêm một Tiết kiệm nút InfoPath mẫu" keá tieáp.
  4. Để kết thúc bài kiểm tra, nhấp vào Đóng Xem trước.
THAM KHẢO
Để biết thêm về các tiêu đề tập tin đính kèm tập tin định dạng, hãy truy cập MSDN Web site sau:
IP2003

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 892730 - Xem lại Lần cuối: 03/05/2012 17:05:00 - Bản sửa đổi: 0.1

Microsoft Office InfoPath 2003

  • kbcode kbscript kbsample kbxml kbprogramming kbhowto kbmt KB892730 KbMtvi
Phản hồi