Отправить файл и данные с C # ошибка 403. Нет ошибки с CURL - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь загрузить файл и некоторые данные с помощью запроса POST из моей программы C # на мой сервер, но я всегда получаю сообщение об ошибке 403.

Параметры сообщения "id" = папка, в которой будет сохранен файл «pos» = имя файла

Таким образом, если пользователь загружает файл "abc.text" и данные POST id = "Mario" pos = "first", файл будет сохранен в /users/Mario/first.txt

.

Я пытался изменить params id и pos как GET, но у меня всегда ошибка 403

C # ответ

{StatusCode: 403, ReasonPhrase: 'Forbidden', Version: 1.1, 
Content: System.Net.Http.StreamContent, 
Headers:{  Vary: Accept-Encoding  X-Varnish: 818481486  Age: 0  
X-Cache: MISS  Transfer-Encoding: chunked  Connection: keep-alive  
Date: Thu, 18 Apr 2019 14:29:10 GMT  Content-Type: text/html; 
charset=iso-8859-1}}

Мой код:

<!DOCTYPE html>
<html>
<head>
  <title>Upload your files</title>
</head>
<body>
  <form enctype="multipart/form-data" action="uploader2.php" method="POST">
    <p>Upload your file</p>
    <input type="file" name="uploaded_file"></input><br />
    <input type="input" name="id"></input><br />
    <input type="input" name="pos"></input><br />
    <input type="submit" value="Upload"></input>
  </form>
</body>
</html>
<!-- language: lang-php -->
<?PHP
  if(!empty($_FILES['uploaded_file']))
  {
    $path = "users/".$_POST['id']."/";

    if(!is_dir($path))  
        {  
        if(!mkdir ($path,0777,true))
            echo 'Error creating folder!';  
        }  

    $path = $path.$_POST['pos'].".txt";

    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) {
      echo "Ok";
    } else{
        echo "Failed!";
    }
  }
?>

Это мой код C #

using (var httpClient = new HttpClient())
{   
    MultipartFormDataContent multipartContent = new MultipartFormDataContent();
    var fp = File.ReadAllBytes("file.txt");

    multipartContent.Add(new StringContent("Mario"), "id");
    multipartContent.Add(new StringContent("first"), "pos");
    multipartContent.Add(new ByteArrayContent(fp, 0, fp.Length), "uploaded_file", "file.txt");
    HttpResponseMessage response = await httpClient.PostAsync("http://host.com/uploader2.php", multipartContent);

    response.EnsureSuccessStatusCode();
    httpClient.Dispose();
    string sd = response.Content.ReadAsStringAsync().Result;
    }
}

1 Ответ

0 голосов
/ 18 апреля 2019

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Используйте это в своем сценарии php:

header("Access-Control-Allow-Origin: *"); // wildcard allows access to all domains

Access-Control-Allow-Origin - это заголовок CORS (Cross-Origin Resource Sharing).

Когда сайт A пытается извлечь контент с сайта B, сайт B может отправить заголовок ответа Access-Control-Allow-Origin, чтобы сообщить браузеру, что содержимое этой страницы доступно для определенных источников.(Источник - это домен, а также схема и номер порта.) По умолчанию страницы сайта B недоступны для любого другого источника;использование заголовка Access-Control-Allow-Origin открывает двери для перекрестного доступа по конкретным запрашивающим источникам.

...