通过c#Web服务将100mb +的大文件上传到Sharepoint 2010 [英] Upload large files 100mb+ to Sharepoint 2010 via c# Web Service

查看:77
本文介绍了通过c#Web服务将100mb +的大文件上传到Sharepoint 2010的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法将大文件上传到Sharepoint2010.我正在使用Visual Studio 2010和Language C#.我从网上找到的内容尝试了多种方法,但没有任何效果.我已将设置和配置文件更改为允许的最大上载限制,但还是一无所获.我正在将copy.asmx用于运行良好的小文件,并在文件太大且引发异常时尝试使用UploadDataAsync,但此方法不起作用.请看下面的代码...

I am unable to upload large files to Sharepoint 2010. I am using Visual Studio 2010 and Language C#. I have tried multiple ways from content I have found online but nothing has worked. I have changed the settings and config files to the maximum allowed upload limits and still nothing. I am using the copy.asmx for small files which works fine and am trying UploadDataAsync when the file is too large and an exception is thrown but this is not working. Please take a look at the code below...

非常感谢您提供任何帮助.

Any/all assistance is greatly appreciated.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace ListsService
{

    public class UploadDocumentcs
    {
        public string UploadResult { get; set; }
        public string Errors { get; set; }
        public UploadDataCompletedEventHandler WebClient_UploadDataCompleted { get; set; }
        public byte[] content { get; set; }

        public void UploadDocumentToSP(string localFile, string remoteFile)
        {
            string result = string.Empty;
            SPCopyService.CopySoapClient client = new SPCopyService.CopySoapClient();

            string sUser = "user";
            string sPwd = "pwd";
            string sDomain = "dmn";
            System.Net.NetworkCredential NC = new System.Net.NetworkCredential(sUser, sPwd, sDomain);

            client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
            client.ClientCredentials.Windows.ClientCredential = NC;

            try
            {
                client.Open();

                string url = "http://SP/TestLibrary/";
                string fileName = localFile.Substring(localFile.LastIndexOf('\\'), (localFile.Length - localFile.LastIndexOf('\\')));
                fileName = fileName.Remove(0, 1);
                string[] destinationUrl = { url + fileName };

                System.IO.FileStream fileStream = new System.IO.FileStream(localFile, System.IO.FileMode.Open);
                byte[] content = new byte[(int)fileStream.Length];
                fileStream.Read(content, 0, (int)fileStream.Length);
                fileStream.Close();

                // Description Information Field
                SPCopyService.FieldInformation descInfo = new SPCopyService.FieldInformation
                                                  {
                                                      DisplayName = "Description",
                                                      Type = SPCopyService.FieldType.File,
                                                      Value = "Test file for upload"
                                                  };

                SPCopyService.FieldInformation[] fileInfoArray = { descInfo };

                SPCopyService.CopyResult[] arrayOfResults;

                 uint result2 = client.CopyIntoItems(fileName, destinationUrl, fileInfoArray, content, out arrayOfResults);                

                // Check for Errors
                 foreach (SPCopyService.CopyResult copyResult in arrayOfResults)
                 {
                     string msg = "====================================" +
                                  "SharePoint Error:" +
                                  "\nUrl: " + copyResult.DestinationUrl +
                                  "\nError Code: " + copyResult.ErrorCode +
                                  "\nMessage: " + copyResult.ErrorMessage +
                                  "====================================";


                     Errors = string.Format("{0};{1}", Errors, msg);
                 }
                 UploadResult = "File uploaded successfully";

            }
            catch (OutOfMemoryException)
            {
                System.Uri uri = new Uri("http://bis-dev-srv2:300/DNATestLibrary/");
                (new System.Net.WebClient()).UploadDataCompleted += new UploadDataCompletedEventHandler(WebClient_UploadDataCompleted);
                (new System.Net.WebClient()).UploadDataAsync(uri, content);

            }

            finally
            {
                if (client.State == System.ServiceModel.CommunicationState.Faulted)
                {
                    client.Abort();
                    UploadResult = "Upload aborted due to error";
                }

                if (client.State != System.ServiceModel.CommunicationState.Closed)
                {
                    client.Close();
                }
            }
        }


        void WcUpload_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
        {

            if (e != null)
            {
                UploadResult = "Upload Unuccessful";
            }
            else
            {
                UploadResult = "Upload Successful";
                //throw new NotImplementedException();
            }
        }
    }
}

推荐答案

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
namespace UploadTester
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private void btnSelectFile_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
            textBox1.Text = openFileDialog1.FileName;
        }

        private void btnUpload_Click(object sender, EventArgs e)
        {
            try
            {
                byte[] content = GetByteArray();
                string filename = Path.GetFileName(openFileDialog1.FileName);

                System.Net.WebClient webClient = new System.Net.WebClient();
                System.Uri uri = new Uri("http://SP/DNATestLibrary/" + filename);
                webClient.Credentials = new NetworkCredential("username", "pwd", "domain");

                webClient.UploadData(uri, "PUT", content);

                MessageBox.Show("Upload Successful");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        byte[] GetByteArray()
        {
            FileStream fileStream = new System.IO.FileStream(openFileDialog1.FileName, System.IO.FileMode.Open);
            byte[] content = new byte[(int)fileStream.Length];
            fileStream.Read(content, 0, (int)fileStream.Length);
            fileStream.Close();

            return content;
        }

        private void btnUploadAsync_Click(object sender, EventArgs e)
        {
            try
            {
                byte[] content = GetByteArray();
                string filename = Path.GetFileName(openFileDialog1.FileName);

                System.Net.WebClient webClient = new System.Net.WebClient();
                System.Uri uri = new Uri("http://SP/DNATestLibrary/" + filename);

                webClient.UploadDataCompleted += new UploadDataCompletedEventHandler(webClient_UploadDataCompleted);
                webClient.Credentials = new NetworkCredential("username", "pwd", "domain");

                webClient.UploadDataAsync(uri, "PUT", content);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        void webClient_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                MessageBox.Show("Upload Successful");
            }
            else
            {
                MessageBox.Show(e.ToString());
            }

        }
    }
}

这篇关于通过c#Web服务将100mb +的大文件上传到Sharepoint 2010的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆