Upload large files 100mb+ to Sharepoint 2010 via c# Web Service

。_饼干妹妹 提交于 2019-12-24 00:35:54

问题


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();
            }
        }
    }
}

回答1:


Shaun
In order to get this to work, you will have to make changes to the SharePoint configuration to increase the upload limit and the time out. The link below shows the necessary steps to get large file uploads to work.

http://blogs.technet.com/b/sharepointcomic/archive/2010/02/14/sharepoint-large-file-upload-configuration.aspx




回答2:


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());
            }

        }
    }
}


来源:https://stackoverflow.com/questions/10300550/upload-large-files-100mb-to-sharepoint-2010-via-c-sharp-web-service

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!