|
101 | 101 | } |
102 | 102 |
|
103 | 103 | [JSInvokable] |
104 | | - public async Task ReceiveBinaryData(BinaryFileTransfer[] files) |
| 104 | + public async Task ReceiveData(IJSStreamReference streamReference, string name, string type, long size) |
105 | 105 | { |
| 106 | + if (MaxFileSize.HasValue && size > MaxFileSize.Value) |
| 107 | + { |
| 108 | + return; |
| 109 | + } |
106 | 110 | if (OnProcessingChanged.HasDelegate) |
| 111 | + { |
107 | 112 | await OnProcessingChanged.InvokeAsync(true); |
108 | | - |
| 113 | + } |
109 | 114 | try |
110 | 115 | { |
| 116 | + var maxAllowedSize = MaxFileSize ?? long.MaxValue; |
| 117 | + await using var stream = await streamReference.OpenReadStreamAsync(maxAllowedSize: maxAllowedSize); |
| 118 | + await using var memoryStream = new MemoryStream(); |
| 119 | + await stream.CopyToAsync(memoryStream); |
| 120 | + var buffer = memoryStream.ToArray(); |
| 121 | + var extension = name.Contains('.') ? name.Split('.').Last() : ""; |
111 | 122 | switch (ContentOutputType) |
112 | 123 | { |
113 | 124 | case FileContentOutput.Base64: |
114 | | - var convertedFiles = files.Select(f => new Base64FileTransfer |
| 125 | + await OnBase64FilesReceived.InvokeAsync(new[] |
115 | 126 | { |
116 | | - Name = f.Name, |
117 | | - Extension = f.Extension, |
118 | | - Type = f.Type, |
119 | | - Size = f.Size, |
120 | | - Content = Convert.ToBase64String(f.Content) |
121 | | - }).ToArray(); |
122 | | - await OnBase64FilesReceived.InvokeAsync(convertedFiles); |
| 127 | + new Base64FileTransfer |
| 128 | + { |
| 129 | + Name = name, |
| 130 | + Extension = extension, |
| 131 | + Type = type, |
| 132 | + Size = size, |
| 133 | + Content = Convert.ToBase64String(buffer) |
| 134 | + } |
| 135 | + }); |
123 | 136 | break; |
124 | 137 | case FileContentOutput.Binary: |
125 | | - await OnBinaryFilesReceived.InvokeAsync(files); |
| 138 | + await OnBinaryFilesReceived.InvokeAsync(new[] |
| 139 | + { |
| 140 | + new BinaryFileTransfer |
| 141 | + { |
| 142 | + Name = name, |
| 143 | + Extension = extension, |
| 144 | + Type = type, |
| 145 | + Size = size, |
| 146 | + Content = buffer |
| 147 | + } |
| 148 | + }); |
126 | 149 | break; |
127 | 150 | default: |
128 | 151 | throw new ArgumentOutOfRangeException(); |
|
131 | 154 | finally |
132 | 155 | { |
133 | 156 | if (OnProcessingChanged.HasDelegate) |
| 157 | + { |
134 | 158 | await OnProcessingChanged.InvokeAsync(false); |
| 159 | + } |
135 | 160 | } |
136 | 161 | await _module!.InvokeVoidAsync("setDragActive", DropperId, false, DragActiveCssClass); |
137 | 162 | } |
|
0 commit comments