Как я могу загрузить файл (большого размера) с помощью FileStream в WebService в IIS (Internt Information Services) - PullRequest
2 голосов
/ 21 мая 2011

Я использую C # для создания сервиса для загрузки файлов.Я создал три метода:

upload_start(string filename) upload_continue(string filename, byte[] buffer) upload_end(string filename)

Это работает, но я не хочу обрабатывать 3функции из клиентской программы.Как я могу открыть FileStream из клиентской программы и позволить серверной стороне завершить загрузку файла?

Ответы [ 3 ]

0 голосов
/ 21 мая 2011

Самым простым подходом, вероятно, будет создание службы REST либо с помощью wcf, либо с помощью чего-то подобного с asp.net, но тогда вы просто выполните операцию POST, и сервер сможет выполнить эту работу.

Вот один из подходов:

http://debugmode.net/2011/05/01/uploading-file-to-server-from-asp-net-client-using-wcf-rest-service/

Это будет более простой интерфейс для вас.

0 голосов
/ 18 октября 2014

Для загрузки большого файла в WebServices (не в Windows Cominication Foundation WCF) необходимо выполнить следующие действия:

В файл на стороне сервера Web.Config добавьте этот xml и измените значение maxRequestLength в зависимости от максимального размера загрузки; по умолчанию defoult maxRequestLength составляет 4 МБ, в этом примере 8192 = МБ

    <httpRuntime
        executionTimeout="600"
        maxRequestLength="8192"
        useFullyQualifiedRedirectUrl="false"
        minFreeThreads="8"
        minLocalRequestFreeThreads="4"
        appRequestQueueLimit="100"
        enableVersionHeader="true"
  />

Добавьте еще одну общедоступную функцию на стороне сервера, эта функция получила байт [], содержащий файл, имя файла и путь, по которому вы не сохраните файл на сервере.

 public String UploadFile(byte[] fileByte, String fileName, String savePath)
        {

            string newPath = savePath;


            if (!Directory.Exists(newPath))
            {
                Directory.CreateDirectory(newPath);
            }

            newPath = newPath + fileName;

            System.IO.FileStream fs1 = null;
            byte[] b1 = null;
            b1 = fileByte;
            fs1 = new FileStream(newPath, FileMode.Create);
            fs1.Write(b1, 0, b1.Length);
            fs1.Flush();
            fs1.Close();
            fs1 = null;

            return newPath;
        }

На стороне клиента добавьте этот код для отправки файла:

Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.FileName = "Select a File"; 
            dlg.DefaultExt = ".xls";  
            dlg.Filter = "Excel documents (.xls)|*.xls";  

            // Show open file dialog box 
            Nullable<bool> result = dlg.ShowDialog();

            // Process open file dialog box results 
            if (result == true)
            {

                string filename = dlg.FileName;


                string file = Path.GetFileName(filename);

                System.IO.FileStream fs1 = null;
                fs1 = System.IO.File.Open(filename, FileMode.Open, FileAccess.Read);
                byte[] b1 = new byte[fs1.Length];
                fs1.Read(b1, 0, (int)fs1.Length);
                fs1.Close();


                String savePath = @"C:\DOC\IMPORT\";
                String newPath = WEB_SERVICES.UploadFile(b1, file, savePath);


                MessageBox.Show(String.Format("The file is uploaded in {0}", newPath));


            }
            else
            {
                MessageBox.Show("Select a file, please");
            }
0 голосов
/ 21 мая 2011

Я не думаю, что вы можете, так как FileStream не Serializable. Почему бы не передать службе имя файла (как вы уже это сделали), чтобы служба открыла файл и обработала его.

...