Идентификатор сеанса не возвращается в Asp.net - PullRequest
1 голос
/ 12 октября 2011

Я пытаюсь использовать plupload JqueryUI Widget Uploader и пытаюсь загрузить изображения с использованием идентификаторов сеансов и сохранять их под соответствующими идентификаторами сеансов, но при событии On completeAll (то есть, когда я их связываю) я пытаюсь отобразить их имена файлов, используя тот же сеанс Идентификаций не происходит.

Кто-нибудь может сказать мне, какую ошибку я совершаю?

Вот мой код:

       <script type="text/javascript">
                 $(function () {
           $("#uploader").plupload({
               runtimes: 'gears,flash,silverlight,browserplus,html5',
               url: 'upload.aspx',
               max_file_size: '10mb',
               chunk_size: '1mb',
               unique_names: true,

               // Resize images on clientside if we can
               resize: { width: 320, height: 240, quality: 90 },

               // Specify what files to browse for
               filters: [
            { title: "Image files", extensions: "jpg,gif,png" },
            { title: "Zip files", extensions: "zip" }
        ],

               // Flash settings
               flash_swf_url: 'js/plupload.flash.swf',

               // Silverlight settings
               silverlight_xap_url: 'js/plupload.silverlight.xap'
           });


           // Client side form validation
           $('form').submit(function (e) {
               var uploader = $('#uploader').plupload('getUploader');

               // Files in queue upload them first
               if (uploader.files.length > 0) {
                   // When all files are uploaded submit form
                   uploader.bind('StateChanged', function () {
                       if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
                           $('form')[0].submit();
                       }
                   });

                   uploader.start();
               } else
                   alert('You must at least upload one file.');

               return false;
           });

           var uploader = $('#uploader').plupload('getUploader');
           uploader.bind('FileUploaded', function (up, file, res) {
             $('#showfilelist').append("<div id=" + file.id + "><a href='uploads/" & Session("ID") &  "/" + file.name + "'><br>" + file.name + "</div>");

           });
       });
</script>

Вот файл обработчика:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If IsNothing(Request.Form("chunk")) = False Then
        If Session("ID") Is Nothing Then
            Session("ID") = Guid.NewGuid.ToString
            IO.Directory.CreateDirectory(Server.MapPath("uploads/" & Session("ID")))
        End If
        Dim chunk As Integer = Request.Form("chunk")
        Dim chunks As Integer = Request.Form("chunks")
        Dim filename As String = Request.Form("name")
        If chunk = 0 Then
            Request.Files(0).SaveAs(Server.MapPath("uploads/") & Session("ID") & "/" & Request.Files(0).FileName)
        Else
            Dim OutputStream As New IO.FileStream(Server.MapPath("uploads/") & Session("ID") & "/" & Request.Files(0).FileName, IO.FileMode.Append)
            Dim InputBytes(Request.Files(0).ContentLength) As Byte
            Request.Files(0).InputStream.Read(InputBytes, 0, Request.Files(0).ContentLength)
            OutputStream.Write(InputBytes, 0, InputBytes.Length - 1)
            OutputStream.Close()
        End If
    End If
End Sub

Отображение имен файлов здесь:

<div id="showfilelist">
    </div>

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

Я должен признать, что я не так знаком с plupload.Однако в Uploadify причина, по которой идентификатор сеанса не передается обратно, заключается в том, что флэш-память не передает cookie-файл сеанса.

SORRY EDIT (новая ссылка, старая имеет дефект безопасности)

Вот кое-что, что вам поможет:

Загрузить файл ashx Context.Session получает значение null

1 голос
/ 12 октября 2011

Я не знаком с plupload, но вижу, что в вашем javascript определенно есть проблема. Проверьте этот конкретный фрагмент:

var uploader = $('#uploader').plupload('getUploader');
uploader.bind('FileUploaded', function (up, file, res) {
     $('#showfilelist').append("<div id=" + file.id + "><a href='uploads/" & Session("ID") &  "/" + file.name + "'><br>" + file.name + "</div>");
});

Часть кода, т.е. + "><a href='uploads/" & Session("ID") & "/" + не является допустимым кодом java-скрипта. Помимо неверного оператора &, вы не можете получить доступ к сеансу на стороне сервера на стороне клиента.

Я считаю, что правильное решение будет включать в себя возвращение идентификатора вашей стороны сервера (Session("ID")) в ответе от вашего обработчика. Вы, вероятно, можете получить доступ к ответу через параметр res обработчика событий FileUploaded.

...