Google云端硬盘上传带有powershell的多部分mime base64编码文件:多部分主体格式错误

时间:2018-11-21 20:23:49

标签: powershell google-drive-api

通证检索全部搞清楚了。

将文件上传到Google云端硬盘。

遇到错误

这是我正在使用的powershell命令:

$response = Invoke-RestMethod -Uri "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart" -Method Post -Headers $uploadHeaders -Body $uploadBody

这是变量$ uploadBody的字符串


--314159265358979323846
Content-Type: application/json; charset=UTF-8

    {
    "description":  "TestCSV",
    "name":  "test-emp.csv",
    "originalFilename":  "test-emp.csv"
}

--314159265358979323846
Content-Transfer-Encoding: base64
Content-Type: application/octet-stream


    c0FNQWNjb3VudE5hbWUsRU1QX05VTQ0KYnNtaXRoLDc3Mzk5Mg0KbHNvbmcsMzM3MTEwDQpnc3Vkbyw2NDkwNTc
--314159265358979323846--

此操作失败-仅更改了数据文件:

--314159265358979323846
Content-Type: application/json; charset=UTF-8

    {
    "description":  "TestCSV",
    "name":  "csv3.csv",
    "originalFilename":  "csv3.csv"
}

--314159265358979323846
Content-Transfer-Encoding: base64
Content-Type: application/octet-stream


    c2VxLGZpcnN0LGxhc3QNCjEsQW15LEJhcmtlcg0KMixMZWUsU2FsYXphcg0KMyxFc3RlbGxhLEtlbm5lZHkNCg
--314159265358979323846--

为完整起见,这是$ uploadHeaders的标头IDictionary参数


Name                           Value                                                                                                                           
----                           -----                                                                                                                           
Authorization                  Bearer ya29.GlxbBiz86xKlRnjzQY2z70vHtWfL4sr28BvX-OKio8PbcEfJ0l7tQgx9btNqMdanYXG_WzSD74WD_15903vn0mYO0G0uI8lez5g77Z_W0gKrIRh_s...
Content-Type                   multipart/related; boundary=314159265358979323846                                                                               
Content-Length                 400                                                                                                                             

我已经阅读了大量有关此内容,并确保有效载荷之前有两个r n。任何指针将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

上传后,您必须重命名文件。

$sourceFile = 'C:\temp\allisv22018201810101009.csv'

$sourceItem = Get-Item $sourceFile

# If uploading to a Team Drive, set this to 'true'
$supportsTeamDrives = 'false'

# Set the file metadata
$uploadMetadata = @{
    originalFilename=$sourceItem.Name
    name=$sourceItem.Name
    description="TestCSV"
}

# Set the upload headers
$uploadHeaders = @{
    Authorization="Bearer $accessToken"
    "Content-Type" = "application/json"
}

# Perform the upload
try {
    $response = Invoke-RestMethod -Uri "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart" -Method Post -Headers $uploadHeaders -InFile $SourceFile
    $urifile = "https://www.googleapis.com/drive/v3/files/$($response.id)"
    $renameResponse = Invoke-RestMethod -Uri $urifile -Method Patch -Headers $uploadHeaders -Body '{ "name":"HappyFile.csv" }'

如果成功上传文件,它将返回 $ urifile 中的值,您可以使用该值来重命名文件。