0

SharePoint Foundation Server 2010 用のかなり単純なビジュアル Web パーツを開発しています。これは、画像ファイルを SharePoint サーバーにアップロードし、後で表示することになっています。以前に作成したドキュメント ライブラリにファイルを正常にアップロードできますが、ファイルを表示できません (IE に赤い十字が表示されます)。SharePoint フロントエンドを使用してファイルの正確なコピーをアップロードすると、開くことができます。誰かが私に欠けているものを教えてくれることを願っています。

以下に、ファイルをサーバーに正常にアップロードするコードを示します。

SPContext.Current.Web.AllowUnsafeUpdates = true;
        string path = "";
        string[] fileName = filePath.PostedFile.FileName.Split('\\');
        int length = fileName.Length;
        // get the name of file from path
        string file = fileName[length - 1];
        SPWeb web = SPContext.Current.Web;
        SPFolderCollection folders = web.Folders;
        SPFolder folder;
        SPListCollection lists = web.Lists;
        SPDocumentLibrary library;
        SPList list = null;
        Guid guid = Guid.Empty;

        if (lists.Cast<SPList>().Any(l => string.Equals(l.Title, "SPUserAccountDetails-UserImages")))
        {
            list = lists["SPUserAccountDetails-UserImages"];
        }
        else
        {
            guid = lists.Add("SPUserAccountDetails-UserImages", "Enthält Mitarbeiter-Fotos", SPListTemplateType.DocumentLibrary);
            list = web.Lists[guid];
        }

        library = (SPDocumentLibrary)list;

        folder = library.RootFolder.SubFolders.Add("SPUserAccountDetails");

        SPFileCollection files = folder.Files;
        Stream fStream = filePath.PostedFile.InputStream;
        byte[] MyData = new byte[fStream.Length];
        Stream stream = new MemoryStream();
        stream.Read(MyData, 0, (int)fStream.Length);
        fStream.Close();
        bool bolFileAdd = true;
        for (int i = 0; i < files.Count; i++)
        {
            SPFile tempFile = files[i];
            if (tempFile.Name == file)
            {
                folder.Files.Delete(file);
                bolFileAdd = true;
                break;
            }
        }
        if (bolFileAdd)
        {
            SPFile f = files.Add(file, MyData);

            f.Item["ContentTypeId"] = "image/jpeg";
            f.Item["Title"] = file;
            f.Item.SystemUpdate();

            SPContext.Current.Web.AllowUnsafeUpdates = false;
            imgPhoto.ImageUrl = (string)f.Item[SPBuiltInFieldId.EncodedAbsUrl];
        }
4

1 に答える 1

0

どうでも。私のコードはファイルの内容を台無しにしているようです。後で解決策を投稿します。

編集:私は愚かで申し訳ありません:-/

私はこれを置き換えました:

Stream fStream = filePath.PostedFile.InputStream;
byte[] MyData = new byte[fStream.Length];
Stream stream = new MemoryStream();
stream.Read(MyData, 0, (int)fStream.Length);
fStream.Close();

これとともに:

Stream fStream = filePath.PostedFile.InputStream;
byte[] MyData = new byte[fStream.Length];
BinaryReader binaryReader = new BinaryReader(fStream);
MyData = binaryReader.ReadBytes((Int32)fStream.Length);
fStream.Close();
binaryReader.Close();

そして突然、すべてが機能しました;-)

于 2012-04-23T14:03:04.313 に答える