0

我正在尝试将一个大文件上传到文档库,但几秒钟后它就失败了。上传单个文档会静默失败,上传多个文档只会显示失败消息。我已将 Web 应用程序的文件大小限制设置为 500MB,并将 IIS 请求长度设置为相同(来自此博客),并增加了 IIS 超时以作为良好的衡量标准。还有其他我错过的尺寸上限吗?

更新我尝试了一些不同大小的文件,任何 50MB 或以上的文件都失败了,所以我假设某处的某些东西仍然设置为 webapp 默认值。

更新 2刚刚尝试使用以下 powershell 上传:

$web = Get-SPWeb http://{site address}
$folder = $web.GetFolder("Site Documents")
$file = Get-Item "C:\mydoc.txt" // ~ 150MB
$folder.Files.Add("SiteDocuments/mydoc.txt", $file.OpenRead(), $false)

并得到这个例外:

Exception calling "Add" with "3" argument(s): "<nativehr>0x80070003</nativehr><nativestack></nativestack>There is no file with URL 'http://{site address}/SiteDocuments/mydoc.txt' in this Web."

这让我感到奇怪,因为文件在上传之前不会存在?注意,虽然文档库有名称Site Documents,但它有 URL SiteDocuments。不知道为什么...

4

2 回答 2

0

你确定你更新了正确的 webapp 吗?文件类型是否被服务器阻止?您的内容数据库中是否有足够的空间?之后我会检查 ULS 日志,看看是否还有其他错误,因为您似乎遇到了需要更新的 3 个点。

于 2013-08-06T14:07:16.560 回答
0

对于上传大文件,您可以使用 PUT 方法而不是使用其他方式上传文档。通过使用 put 方法,您可以将文件直接保存到内容数据库中。见下面的例子

注意:下面代码的缺点是不能直接捕获负责上传的对象,也就是不能直接更新上传文档的附加自定义属性。

public static bool UploadFileToDocumentLibrary(string sourceFilePath, string targetDocumentLibraryPath)
    {
        //Flag to indicate whether file was uploaded successfuly or not
        bool isUploaded = true;
        try
        {
            // Create a PUT Web request to upload the file.
            WebRequest request = WebRequest.Create(targetDocumentLibraryPath);

            //Set credentials of the current security context
            request.Credentials = CredentialCache.DefaultCredentials;
            request.Method = “PUT”;

            // Create buffer to transfer file
            byte[] fileBuffer = new byte[1024];

            // Write the contents of the local file to the request stream.
            using (Stream stream = request.GetRequestStream())
            {
                //Load the content from local file to stream
                using (FileStream fsWorkbook = File.Open(sourceFilePath, FileMode.Open, FileAccess.Read))
                {
                    //Get the start point
                    int startBuffer = fsWorkbook.Read(fileBuffer, 0, fileBuffer.Length);
                    for (int i = startBuffer; i > 0; i = fsWorkbook.Read(fileBuffer, 0, fileBuffer.Length))
                    {
                        stream.Write(fileBuffer, 0, i);
                    }

                }
            }

            // Perform the PUT request
            WebResponse response = request.GetResponse();

            //Close response
            response.Close();
        }
        catch (Exception ex)
        {
            //Set the flag to indiacte failure in uploading
            isUploaded = false;
        }

        //Return the final upload status
        return isUploaded;
    }

这是调用此方法的示例

UploadFileToDocumentLibrary(@”C:\test.txt”, @”http://home-vs/Shared Documents/textfile.pdf”);
于 2013-10-01T22:03:05.410 回答