user3866590
user3866590

Reputation: 1

Set "client_updated_time" when uploading file to OneDrive

I have nearly completed a basic OneDrive interface, and am able to handle creating and writing folders, files, and so forth. The last element to get working is to update a file's date/time stamp to match that of the local (originating) file.

When I drop a file via the browser interface, the file's date/time stamp shows correctly in the view. This is reflected in the "client_updated_time" when I read the file's properties later in my application. Clear enough.

However, I cannot find any way to update this field programmatically from within my application. I am using the following code, to no avail. I have a valid _accessToken value, a valid fileId for the new file, and the call results always indicates success.

The "name" and "updated_time" elements are just in there to see if anything happens, and the file will indeed rename if I mangle the fileName variable a bit. I didn't expect the "updated_time" to updated, but it seems to me that the "client_updated_time" element should work.

Using fiddler, it appears that the browser-based interface (java?) opens a session, sends the file over, and then in the close-session call uses a header entry labelled "X-Last-Modified-ISO8601" to set the file's date-time stamp. However, using the REST interface, I cannot find any examples of this. The documentation for setting file properties mentions renaming only (which works in this code).

Any feedback on how to accomplish setting "client_updated_time" with REST calls would be much appreciated!

Here's the relevant code:

Private _liveURL As String = "https://apis.live.net/v5.0/"

Private Sub AddAuthorizationHeader(hc As HttpClient, authorization As String)
    If Len(authorization) > 0 Then
        hc.DefaultRequestHeaders.Authorization = New Headers.AuthenticationHeaderValue("Bearer", authorization)
    End If
End Sub

Public Function WebPUT(uri As String, contentType As String, authorization As String, data As String) As String
    Dim response As String = String.Empty

    Try
        Dim hc As New HttpClient()
        Dim content As New Http.StringContent(data, System.Text.Encoding.UTF8, contentType)

        AddAuthorizationHeader(hc, authorization)

        Using r = hc.PutAsync(uri, content).Result
            response = r.Content.ReadAsStringAsync.Result
        End Using
    Catch ex As Exception
        ' fake it
        response = "{""error"": {""code"": ""invalid_request"", ""message"": """ + ex.Message + """}}"
    End Try

    Return response
End Function

Private Function UpdateFileDateTime(fileId As String, fileName As String, fileDt As String) As Boolean
    Dim response As Boolean = False

    Dim wr As String = WebHelper.WebPUT(_liveURL + fileId, "application/json", _accessToken, "{ ""name"": """ + fileName + """, ""updated_time"": """ + fileDt + """, ""client_updated_time"": """ + fileDt + """ }")

    '... parse wr for response

    Return response
End Function

Upvotes: 0

Views: 771

Answers (1)

Jeanine M S
Jeanine M S

Reputation: 458

Based on the file object reference, that field is read-only via the REST API: http://msdn.microsoft.com/en-us/library/dn631834.aspx

Upvotes: 1

Related Questions