Может ли большой файл, сохраненный моей службой WCF, стать поврежденным? - PullRequest
0 голосов
/ 24 января 2019

Дело в том, что у меня есть служба WCF для загрузки файлов, которая, кажется, прекрасно работает с небольшими файлами, но с большими файлами она может повредить или повредить их, поэтому я не могу открыть их позже.

Iхочу, чтобы их размер не превышал 5 МБ, поэтому я установил привязку, как я видел во многих сообщениях:

<bindings>
  <webHttpBinding>
    <binding name="httpsBinding"
             maxReceivedMessageSize ="5000000"
             maxBufferPoolSize ="5000000"
             maxBufferSize="5000000"
             transferMode ="Streamed">
      <readerQuotas  maxArrayLength="5000000" maxStringContentLength="5000000" />
      <security mode="None"/>
    </binding>
  </webHttpBinding>      
</bindings>

Файлы загружаются и хранятся в папке lynux, используемой совместно с помощью samba.Все работает нормально, файлы любого типа сохраняются xlsx, png, jpg, pdf, txt, проблема в том, что когда размер файла больше (я не знаю точного предела), скажем, 1 МБ, я не могу открыть файлыкоторые сохраняются на сервере.Я протестировал файлы размером в сотни КБ и работаю, но с файлом Excel размером 3 МБ и изображением png размером 1,7 МБ сохраняются на сервере, но когда я пытаюсь открыть их, используя предоставленную мной ссылку для файла, или открыть файл из папки напрямуюпоявляется какое-то сообщение.В файлах Excel появляется что-то о временном файле appdata, который не найден, и с помощью png появляется сообщение «кажется, мы не можем открыть файлы такого типа».Я не знаю, повреждено ли правильное слово, но может ли файл как-то повредить во время потока или процесса сохранения?

Спасибо за вашу помощь здесь.Я не предоставляю больше кода, поскольку во время компиляции или при вызове службы нет сообщений об ошибках, поэтому у меня нет стековой трассировки, чтобы конкретно указать, где происходит проблема.Файлы имеют тот же размер, что и оригинал?Да!

1 Ответ

0 голосов
/ 25 января 2019

Так что, если кто-то сталкивается с той же проблемой, проверьте размер буфера. Я использую эту форму чтения потока:

Dim buffer As Byte() = New Byte(1000000) {}
Dim bytes_read As Integer = 0
Dim bytes_total As Integer = 0
Do
    bytes_read = invoice_stream.Read(buffer, 0, buffer.Length)
    bytes_total += bytes_read
Loop While bytes_read > 0

Я установил для веб-конфигурации значение 5 МБ, но размер моего буфера составляет всего 1 МБ, поэтому я получил поврежденные или поврежденные файлы при попытке загрузить файлы размером более 1 МБ. Непонятная часть была, когда размер сохраненных файлов был таким же, как и у оригинала, и это из-за этой строки, которую я использую для изменения размера массива байтов, чтобы я не всегда получал файл размером 5 МБ:

Array.Resize(buffer, bytes_total)

Таким образом, в основном я сохранил только последнюю часть или последние 1 МБ потока с кучей нулей для завершения исходного размера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...